解析SQL Server中SQL日期转换出错的原因
程序员文章站
2022-05-09 08:08:59
开发人员有时候使用类似下面sql将字符串转换为日期时间类型,乍一看,这样的sql的写法是没有什么问题的。但是这样的sql其实有时候就是一个定时炸弹,随时可能出现问题(),下面简单对这种...
开发人员有时候使用类似下面sql将字符串转换为日期时间类型,乍一看,这样的sql的写法是没有什么问题的。但是这样的sql其实有时候就是一个定时炸弹,随时可能出现问题(),下面简单对这种情况进行一个简单概括。
select convert(datetime, '2020-01-13 6:46:42');
如果你将连接数据库的登录名的默认语言修改为aribc,然后去执行上面sql语句,就会遇到错误,为什么呢?
为什么上面sql的日期转换出错了呢?其实是因为登录名修改默认语言后,会话对应的date_format变化了,从mdy变成了dmy,所以上面转换就报错了,有时候不报错,但是可能转换成一个错误日期,产生了逻辑错误,这个反而是一个跟糟糕的隐性错误。等你发现的时候,可能已经产生大量错误数据了。
select session_id ,program_name ,client_interface_name ,language ,date_format from sys.dm_exec_sessions where session_id = 53;
关于不同语言的默认date_format,可以使用下面命令查看:
sp_helplanguage 'us_english'
另外一种情况,如果当前会话使用set命令修改过dateformat,也会遇到这个错误,如下所示:
set dateformat dmy; go select convert(datetime, '2020-01-13 6:46:42');
这种情况就比较复杂了,有可能是某一段sql里面设置了dateformat,导致整个会话后面的日期格式全部变化了。所以上面这种sql的“健壮性”就比较差,在平时就要避免写出这样的sql,如果你使用这样的sql,不管是会话的默认语言变化了,还是当前会话的dateformat变化了,都不会产生错误或逻辑错误。
select convert(datetime,'2020-01-13 6:46:42', 120)。
平时遇到这种日期转换,就一定要明确指定转换格式,让其不要受会话的dateformat变化影响,书写健壮、可靠的sql语句,下面这两个简单sql的细微差别,也可判别一个人是否用有书写健壮性sql的意识!
select convert(datetime, '2020-01-13 6:46:42'); select convert(datetime, '2020-01-13 6:46:42', 120)
总结
以上所述是小编给大家介绍的解析sql server中sql日期转换出错的原因,希望对大家有所帮助
推荐阅读
-
sql server日期转换为dd-mon-yyyy和dd-MMM-yyyy这样的格式(27-Aug-2019)
-
解析SQL Server中SQL日期转换出错的原因
-
为什么你SQL Server中SQL日期转换出错了呢?
-
解析SQL Server中datetimeset转换datetime类型问题
-
sql server 日期时间与字符串的转换
-
关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
-
Sql Server中Substring函数的用法实例解析
-
查询SQL Server 2005数据库中数据库的最后备份日期
-
SQL Server中CONVERT()日期转换函数的用法
-
SQL Server中,实现二进制与字符类型之间的数据转换