查询以查找包含日期列的所有表

20 t-sql types sql-server-2005 date

任何人都可以让我知道查询以查找所有具有日期列的表.

谢谢

nin*_*ded 19

这应该可以解决问题,只需在需要时添加其他类型:

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')
Run Code Online (Sandbox Code Playgroud)

编辑:这也适用于Sybase和任何其他T-SQL变体.

  • 哎呀,事实证明sysobject等在SQL 2005中用sys.object,sys.columns等替换.我发现上面的查询在SQL 2008中是**完全不可靠**.@RobS下面的答案提供了正确的结果(更新的)包括所有类型的). (2认同)

Rob*_*obS 17

这在当前数据库中的表上使用INFORMATION_SCHEMA.
在SQL Server 2008中测试过.

    select distinct c.TABLE_NAME     
    from INFORMATION_SCHEMA.COLUMNS as c
    where c.DATA_TYPE = 'datetime'
Run Code Online (Sandbox Code Playgroud)

使用系统视图的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
Run Code Online (Sandbox Code Playgroud)


Man*_*ion 9

这是RobS的回答的另一个发挥,它将引入所有不同类型的日期格式和时间格式,因为引入了date,datetime2和时间.

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%'
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2012和2014中测试过但应该在2003,2005,2008以及许多ODBC连接中运行.