【问题标题】:How to check whether (var)char is a valid ISO date (112)如何检查 (var)char 是否是有效的 ISO 日期 (112)
【发布时间】:2011-07-11 21:53:29
【问题描述】:

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

【问题讨论】:

标签: sql-server tsql datetime


【解决方案1】:

如果您不确定所有值的长度是否为 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

【讨论】:

    【解决方案2】:

    ISDATE() 也适用于 YYYYMMDD 格式

    SELECT ISDATE('20010101')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2017-02-28
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多