我的目标是在包含日期的表中获取列名。它们看起来像"SMTH_2000/01/01"。
如果我使用
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME LIKE '%_[0-9]%'
工作正常,但也返回带有数字的列(显然)
如果我使用
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME LIKE '%_[0-9]/[0-9]%'
工作也还可以。我认为"嗯,"_[0-9]/"能够找到"_"和"/"之间有 4 个数字的字符串
我试图执行此查询(在末尾再添加一个斜杠):
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME LIKE '%_[0-9]/[0-9]/%'
它没有用。
有人可以解释为什么在一种情况下它将 [0-9] 与 4 个数字(而不是一个)匹配,而在另一种情况下它没有?我试图"谷歌"答案,但没有找到关于这个的东西。
这是你的模式
SMTH_2000/01/01
用于匹配此模式的 SQL ServerLIKE
模式可能是:
%[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]%
^^ 4 digit year ^^ month ^^ day
试试这个完整的查询:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'MY_TABLE' AND
COLUMN_NAME LIKE '%[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]%'
如@PanagiotisKanavos所述,从性能的角度来看,以这种方式处理日期可能并不理想,因为它会使 SQL Server 的日期函数的所有功能都无法使用。 如果您计划经常运行此类查询,则可以在某个时候将日期提取到单独的日期列中。
您可以使用以下满足 your 模式的查询
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MY_TABLE'
AND COLUMN_NAME LIKE '%_[0-9][0-9][0-9][0-9]/[0-9][0-9]/%'
或
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MY_TABLE'
AND COLUMN_NAME LIKE '%_[0-9]/[0-9][0-9]/%'