当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《查询以查找包含日期列的所有表》经验,为你挑选了3个好方法。

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

谢谢



1> ninesided..:

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

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')

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


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

2> RobS..:

这在当前数据库中的表上使用INFORMATION_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



3> ManOVision..:

这是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%'

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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有