2011-03-11 36 views
19

Tôi có bảng có tên cột a1,a2...,b1.b2....sql chọn với tên cột như

Làm cách nào tôi có thể chọn tất cả những người có tên cột như a%?

+0

bạn đang cố truy vấn danh sách tên cột và truy vấn các cột đó? –

+0

Mặc dù có thể tôi sẽ khuyên bạn chống lại việc này. Câu hỏi của bạn ngụ ý một trong hai điều 1) Bạn không muốn khai báo rõ ràng tất cả các cột của mình (bạn nên làm gì) hoặc 2) Bạn không biết lược đồ của bảng bạn đang truy vấn. Nếu bạn không biết lược đồ của bảng, bạn sẽ không có thứ nguyên nhất quán của tập dữ liệu được trả lại .... – Matthew

+0

@Matthew, cảm ơn nhận xét của bạn. Tôi sẽ hỏi một câu hỏi newbie liên quan. –

Trả lời

0

Bạn không thể với SQL chuẩn. Tên cột không được xử lý như dữ liệu trong SQL.

Nếu bạn sử dụng công cụ SQL có các bảng siêu dữ liệu lưu trữ tên cột, loại, v.v. bạn có thể chọn trên bảng đó thay thế.

+8

'select * from information_schema.columns' :) – Blorgbeard

+0

.. đó là chuẩn sql, là những gì tôi muốn nói. – Blorgbeard

+1

@Blorgbeard, thông tin chính xác của bạn là lược đồ SQL chuẩn. Tuy nhiên, không phải tất cả các công cụ đều thực hiện nó, và không phải tất cả đều sử dụng tên này. Thực sự phụ thuộc vào động cơ. –

0
SELECT * FROM SysColumns WHERE Name like 'a%' 

sẽ giúp bạn có được một danh sách các cột, bạn sẽ muốn lọc hơn để hạn chế nó vào bảng mục tiêu của bạn

Từ đó bạn có thể xây dựng một số sql ad-hoc

+0

thanks.Nó sẽ là tốt đẹp nếu một số db có thể điều trị cột một cách đối xứng như hàng, giống như một tờ speead trong excel ... –

4

Bạn cần phải sử dụng xem bảng information_schema

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = my_table_name AND COLUMN_NAME like 'a%' 

ĐẾN nội tuyến hàng bạn có thể sử dụng PIVOT và để thực hiện chức năng EXEC().

41

Điều này sẽ giúp bạn có được danh sách

select * from information_schema.columns 
where table_name='table1' and column_name like 'a%' 

Nếu bạn muốn sử dụng để xây dựng một truy vấn, bạn có thể làm một cái gì đó như thế này:

declare @sql nvarchar(max) 
set @sql = 'select ' 
select @sql = @sql + '[' + column_name +'],' 
from information_schema.columns 
where table_name='table1' and column_name like 'a%' 
set @sql = left(@sql,len(@sql)-1) -- remove trailing comma 
set @sql = @sql + ' from table1' 
exec sp_executesql @sql 

Lưu ý rằng ở trên được viết cho SQL Máy chủ.

+1

Cảm ơn Blorgbeard, tôi thích cách bạn cũng bao gồm một truy vấn để sử dụng các cột thực tế động. Tôi đang ở trong một tình huống mà các cột phát triển trên bàn bên ngoài tầm kiểm soát của tôi, vì vậy điều này làm việc hoàn hảo cho tôi. Đã bỏ phiếu! – Ryan

+0

Điều này thật tuyệt vời! Chắc chắn sẽ sử dụng cái này. – CSharper

1

Đây là một cách tốt đẹp để hiển thị các thông tin mà bạn muốn:

SELECT B.table_catalog as 'Database_Name', 
     B.table_name as 'Table_Name', 
     stuff((select ', ' + A.column_name 
       from INFORMATION_SCHEMA.COLUMNS A 
       where A.Table_name = B.Table_Name 
       FOR XML PATH(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)') 
       , 1, 2, '') as 'Columns' 
    FROM INFORMATION_SCHEMA.COLUMNS B 
    WHERE B.TABLE_NAME like '%%' 
     AND B.COLUMN_NAME like '%%' 
    GROUP BY B.Table_Catalog, B.Table_Name 
    Order by 1 asc 

Thêm bất cứ điều gì giữa hai '%%' trong các lựa chọn chính để thu hẹp những gì bảng và/hoặc tên cột mà bạn muốn.

2

này sẽ cho bạn thấy tên bảng và tên cột

select table_name,column_name from information_schema.columns 
where column_name like '%breakfast%' 
0

Blorgbeard đã có một câu trả lời tuyệt vời cho SQL server. Nếu bạn có một máy chủ MySQL như của tôi thì sau đây sẽ cho phép bạn chọn thông tin từ các cột mà tên giống như một số cụm từ khóa. Bạn chỉ cần thay thế tên bảng, tên cơ sở dữ liệu và từ khóa.

SET @columnnames = (SELECT concat("`",GROUP_CONCAT(`COLUMN_NAME` SEPARATOR "`, `"),"`") 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='your_database' 
    AND `TABLE_NAME`='your_table' 
    AND COLUMN_NAME LIKE "%keyword%"); 

SET @burrito = CONCAT("SELECT ",@columnnames," FROM your_table"); 

PREPARE result FROM @burrito; 
EXECUTE result; 
Các vấn đề liên quan