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

时间:2011-07-11 13:43:08

标签: sql-server tsql datetime

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

的事情
SELECT id, isValidDate(datestring) FROM my_hypothetical_table

对我而言,这可以像查询一样运行(所以我可以,例如,SELECT * from othertable INNER JOIN hypothetical_table on hypothetical_table.id = othertable.hypothetical_FK WHERE isValidDate(hypothetical_table.datestring) = 1)。捕捉错误似乎不可行。

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

2 个答案:

答案 0 :(得分:5)

ISDATE()也可以使用YYYYMMDD格式

SELECT ISDATE('20010101')

答案 1 :(得分: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

运行它会产生输出:

id          datestring IsDate
----------- ---------- -----------
1           20110711   1
2           2011       1
3           20110228   1
4           20110229   0
5           2011071    0
6           201107     1