如何处理SQL中的日期转换错误?
所以我尝试将SQL数据库中的字符串转换为日期时间值 我在这样的表格中有一些日期:如何处理SQL中的日期转换错误?,sql,string,tsql,error-handling,type-conversion,Sql,String,Tsql,Error Handling,Type Conversion,所以我尝试将SQL数据库中的字符串转换为日期时间值 我在这样的表格中有一些日期: 23/12/2013 16:34:32 24/12/2013 07:53:44 24/12/2013 09:59:57 24/12/2013 12:57:14 24/12/2013 12:48:49 24/12/2013 13:04:17 24/12/2013 13:15:47 24/12/2013 13:21:02 24/12/2013 14:01:28 24/12/2013 14:02:22 24/12/201
23/12/2013 16:34:32
24/12/2013 07:53:44
24/12/2013 09:59:57
24/12/2013 12:57:14
24/12/2013 12:48:49
24/12/2013 13:04:17
24/12/2013 13:15:47
24/12/2013 13:21:02
24/12/2013 14:01:28
24/12/2013 14:02:22
24/12/2013 14:02:51
它们被存储为字符串
我想把它们转换成datetime
SELECT CONVERT(datetime, analysed, 103 )
FROM OIL_SAMPLE_UPLOAD
但是,当我运行查询时会收到此消息
结果将varchar数据类型转换为datetime数据类型
在超出范围的值中
大概是因为某些值的格式不正确(尽管我还没有发现其中任何一个)
如果某些值不能转换,也没关系,我只需要一种处理这种情况的方法
类似于ISNULL(CONVERT(datetime,analysisted,103))的东西也不错,只是CONVERT函数在失败时不返回NULL 对于SQL Server,您可以使用函数检查值是否为有效日期
SELECT CASE WHEN ISDATE(analysed)=1 THEN CONVERT(datetime, analysed, 103 )
ELSE '' END
FROM OIL_SAMPLE_UPLOAD
如果您只需要日期部分,则使用
子字符串
并按如下方式计算日期。这至少可以为您提供正确的日期部分
SELECT CONVERT(datetime, SUBSTRING(analysed, 0, 11), 103 )
FROM OIL_SAMPLE_UPLOAD
您可以使用或函数来清除字符串的格式为dd/MM/yyyy hh:MM:ss我不希望对正在使用的数据库进行任何更改。ie:我更喜欢更改设置日期格式dmy;除非更改仅在查询期间存在。这不会对数据库进行任何更改,它仅用于检查持续时间查询执行情况。要使其正常工作,我需要将DATEFORMAT设置为dmy。我可以使用STUFF(STUFF(已分析,4,2,子字符串(已分析,1,2)),1,2,子字符串(已分析,4,2))修复此问题需要11个字符选择转换(日期时间,子字符串(已分析,0,11),103)注意,这些函数仅在SQL Server 2012及以后版本(110)中可用