主页 > 知识库 > 解析SQL Server中SQL日期转换出错的原因

解析SQL Server中SQL日期转换出错的原因

热门标签:电销机器人 深圳 南京电销外呼系统哪家好 地图标注如何弄全套标 股票配资电销机器人 实体店地图标注怎么标 外呼系统会封吗 万利达综合医院地图标注点 武汉AI电销机器人 在电子版地图标注要收费吗

开发人员有时候使用类似下面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日期转换出错的原因,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:
  • MySQL日期函数与日期转换格式化函数大全
  • MySQL中日期和时间戳互相转换的函数和方法
  • 分享Sql日期时间格式转换
  • SQL SERVER 日期格式转换详解
  • SQLserver中用convert函数转换日期格式的方法
  • PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case
  • mysql 日期和时间格式转换实现语句
  • sql语句中如何将datetime格式的日期转换为yy-mm-dd格式

标签:泰安 武威 广东 安徽 汕头 台州 济源 济宁

巨人网络通讯声明:本文标题《解析SQL Server中SQL日期转换出错的原因》,本文关键词  解析,SQL,Server,中,日期,转,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《解析SQL Server中SQL日期转换出错的原因》相关的同类信息!
  • 本页收集关于解析SQL Server中SQL日期转换出错的原因的相关信息资讯供网民参考!
  • 推荐文章