我有一个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格式。
答案 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