2008-12-11 19 views

Trả lời

10

Điều này sử dụng INFORMATION_SCHEMA trên bảng trong cơ sở dữ liệu hiện tại.
Tested trong SQL Server 2008.

select distinct c.TABLE_NAME  
    from INFORMATION_SCHEMA.COLUMNS as c 
    where c.DATA_TYPE = 'datetime' 

Một truy vấn cho SQL 2005/2008 sử dụng hệ thống quan điểm:

select tbl.name as 'Table', c.name as 'Column Name', t.name as 'Type' 
from sys.columns as c 
inner join sys.tables as tbl 
on tbl.object_id = c.object_id 
inner join sys.types as t 
on c.system_type_id = t.system_type_id 
where t.name in ('datetime', 'date') 
order by tbl.name 
17

này nên làm như lừa, chỉ cần thêm trong các loại bổ sung nếu bạn cần chúng:

select 
    so.name table_name 
    ,sc.name column_name 
    ,st.name data_type 
from sysobjects so 
inner join syscolumns sc on (so.id = sc.id) 
inner join systypes st on (st.type = sc.type) 
where so.type = 'U' 
and st.name IN ('DATETIME', 'DATE', 'TIME') 

chỉnh sửa: này cũng hoạt động trong Sybase và bất kỳ biến thể T-SQL khác S.

+0

+1 để làm việc trong Sybase. Tốt đẹp! – Learning

+0

Dễ dàng sửa đổi để tìm tất cả các bảng có tên cột cụ thể. (Đó là cách tôi có ở đây.) Cảm ơn! – caseyboardman

+0

Xin cảm ơn! Đối với SQL 2008, bạn sẽ muốn cập nhật mệnh đề WHERE của bạn để đọc ** AND st.name IN ('DATETIME', 'DATE', 'TIME', 'DATETIME2', 'SMALLDATETIME', 'DATETIMEOFFSET') ** – dividius

0

Tôi biết rằng đây là một câu hỏi cũ, nhưng tôi thấy nó tìm kiếm giải pháp vấn đề tương tự.
Đây là những gì tôi đang sử dụng:

SELECT 
    DISTINCT OBJECT_NAME(col.OBJECT_ID) AS [TableName] 
FROM 
    sys.all_columns col 
    INNER JOIN sys.types typ 
    ON col.user_type_id = typ.user_type_id 
WHERE 
    col.user_type_id IN (61) 

Bạn có thể tìm thấy tất cả các kiểu dữ liệu cơ bản ở đây: http://www.sqlservercurry.com/2008/06/find-all-columns-with-varchar-and.html

Nếu Bạn muốn tìm tất cả các cột với kiểu cụ thể trong một bảng cụ thể chỉ cần sử dụng này:

SELECT 
    OBJECT_NAME(col.OBJECT_ID) AS [TableName] 
    ,col.[name] AS [ColName] 
    ,typ.[name] AS [TypeName] 
FROM 
    sys.all_columns col 
    INNER JOIN sys.types typ 
    ON col.user_type_id = typ.user_type_id 
WHERE 
    col.user_type_id IN (61) 
    AND 
    OBJECT_NAME(col.OBJECT_ID) = 'TABLE_NAME' 

Mayby ai đó sẽ tìm thấy nó hữu ích :)

2

Cải thiện nhẹ cho truy vấn RobS ở trên. Điều này cũng trả về cột tên lược đồ.

select s.name as 'SchemaName', 
tbl.name as 'Table', c.name as 'Column Name', t.name as 'Type' 
from sys.columns as c 
inner join sys.tables as tbl 
on tbl.object_id = c.object_id 
inner join sys.types as t 
on c.system_type_id = t.system_type_id 
inner join sys.schemas s 
on tbl.schema_id = s.schema_id 
where t.name in ('datetime', 'date') 
order by s.name, tbl.name 
9

Dưới đây là một vở kịch tắt của câu trả lời cướp của mà sẽ nhận được tất cả các loại khác nhau của các định dạng ngày tháng và định dạng thời gian kể từ sự ra đời của ngày, datetime2, và thời điểm đó đã được giới thiệu.

SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE LIKE '%date%' OR DATA_TYPE LIKE '%time%' 

Đã kiểm tra trong SQL Server 2012 và 2014 nhưng cũng hoạt động trong 2003, 2005, 2008 và nhiều kết nối ODBC.

Các vấn đề liên quan