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', 'SMALLDATETIME')
这也适用于Sybase和任何其他T-SQL变体。
**更新2/3/2025 **上面在MS SQL较新的数据库中不起作用 但是下面确实有SELECT so.name table_name
,sc.name column_name
,st.name data_type
FROM sys.objects so
INNER JOIN sys.columns sc ON so.object_id = sc.object_id
INNER JOIN sys.types st ON sc.user_type_id = st.user_type_id
WHERE so.type = 'U'
AND st.name IN ('DATETIME', 'DATE', 'TIME', 'SMALLDATETIME')
这在当前数据库中的表上使用信息_schema。
在SQL Server 2008中测试。
select distinct c.TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS as c
where c.DATA_TYPE = 'datetime'
使用系统视图的SQL 2005/2008的其他查询:
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
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%'
在SQL Server 2012和2014中进行了测试,但应在2003、2005、2008和许多ODBC连接工作。
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
SELECT DISTINCT(TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
DATA_TYPE='datetime'
我知道这是一个古老的问题,但我发现它正在寻找类似的问题解决方案。 这是我正在使用的:
如果您想在特定表中找到具有特定类型的所有列,只需使用以下方式:
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'