【问题标题】:Avoid errors when attempting to convert to datetime尝试转换为日期时间时避免错误
【发布时间】:2015-05-14 16:45:03
【问题描述】:

SQL 中有没有一种方法可以忽略转换失败的记录。设置一些默认值也可以。

> SELECT convert(datetime, foo_str)
> FROM foo_tbl

 ------------------------
 Aug 23 2013 00:00:00.000
 Aug 17 2013 00:00:00.000
 May 06 2015 00:00:00.000
 Aug 13 2013 00:00:00.000
 Aug 09 2013 00:00:00.000
 Sep 05 2007 00:00:00.000
 May 06 2015 00:00:00.000
 May 06 2015 00:00:00.000
 Feb 24 2009 00:00:00.000
 May 06 2015 00:00:00.000
 Mar 29 2013 00:00:00.000
 May 06 2015 00:00:00.000
 Jul 24 2010 00:00:00.000
 May 06 2015 00:00:00.000
 May 06 2015 00:00:00.000
 May 03 2015 00:00:00.000

Msg 249, Level 16, State 1 , Line 1 显式期间的语法错误 将 VARCHAR 值“10101”转换为 DATETIME 字段。

能否避免错误以完成 SELECT 语句?

【问题讨论】:

    标签: sql tsql sybase


    【解决方案1】:

    下面的代码应该可以在 sybase 上运行

    SELECT convert(datetime, foo_str)
    FROM foo_tbl
    WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'
    

    如果00:00:00.000 是常量,你可以更简单

    SELECT convert(datetime, foo_str)
    FROM foo_tbl
    WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9] 00:00:00.000'
    

    SELECT convert(datetime, foo_str)
    FROM foo_tbl
    WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9]%'
    

    【讨论】:

    • 太棒了,我的日期是 YYYYMMDD 格式,所以我调整了类似的字符串,但真的非常感谢
    • @isonix 很高兴能帮上忙 :)
    • 请注意,这里使用的正则表达式仅检查值是否看起来像 datetime 而不是“嘎嘎”像一个。例如,如果月份名称无效,您仍然会收到错误消息。
    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多