如何检查(var)char是否是有效的ISO日期(112)

Mar*_*ijn 0 t-sql sql-server datetime

我有一个char(8)字段,它should确实包含yyyymmdd dateformat中的值.鉴于(假设的)表格,id(int)|datestring(char(8))我希望能够做类似的事情

SELECT id, isValidDate(datestring) FROM my_hypothetical_table
Run Code Online (Sandbox Code Playgroud)

对我来说这很重要,因为它可以像查询一样运行(例如,我可以SELECT * from othertable INNER JOIN hypothetical_table on hypothetical_table.id = othertable.hypothetical_FK WHERE isValidDate(hypothetical_table.datestring) = 1).捕获错误似乎不可行.

请注意,IsDate()函数仅适用于斜杠分隔日期,而不适用于yyyymmdd格式.

Mad*_*nan 5

ISDATE()也可以使用YYYYMMDD格式

SELECT ISDATE('20010101')
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您不确定所有值的长度是8位,您可能需要添加长度检查.

DECLARE @MyTable TABLE (id INT, datestring CHAR(8))
INSERT INTO @MyTable VALUES (1, '20110711')
INSERT INTO @MyTable VALUES (2, '2011')
INSERT INTO @MyTable VALUES (3, '20110228')
INSERT INTO @MyTable VALUES (4, '20110229')
INSERT INTO @MyTable VALUES (5, '2011071')
INSERT INTO @MyTable VALUES (6, '201107')
SELECT id, datestring, ISDATE(datestring) AS IsDate FROM @MyTable
Run Code Online (Sandbox Code Playgroud)

运行它会产生输出:

id          datestring IsDate
----------- ---------- -----------
1           20110711   1
2           2011       1
3           20110228   1
4           20110229   0
5           2011071    0
6           201107     1
Run Code Online (Sandbox Code Playgroud)