sqlserver 比较日期(解析SQL Server中SQL日期转换出错的原因)
sqlserver 比较日期
解析SQL Server中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 2014配置文件路径(SQL Server 2012 FileTable 新特性详解)
- laravel数据表配置(laravel实现按月或天或小时统计mysql数据的方法)
- sqlserver带参数的存储过程(SQL Server 日期和时间的内部存储过程)
- SQL SERVER中与内存相关的计数器
- dedecms时间代码(Dedecms中常用数据调用的sql语句汇总)
- sqlserver如何设置定时备份(SQL Server使用脚本实现自动备份的思路详解)
- dedecms统计功能(DedeCMS sql 调用数字递增标签以及修改方法)
- centos安装sql server(Centos 7.3下SQL Server安装配置方法图文教程)
- mysql8.0.26安装教程(mysql 8.0.22压缩包完整安装与配置教程图解亲测安装有效)
- sql server事件跟踪器中常用的跟踪事件
- sqlcount函数转化为数值型(SQL判断是否"存在",还在用 count 操作?很耗时的!)
- mysql拼接和过滤(mysql 如何动态修改复制过滤器)
- mysql的基本索引类型(MySQL 隔离数据列和前缀索引的使用总结)
- 将mysql中的表导出来(MySQL之导出整个及单个表数据的操作)
- 命令行如何使用xampp中的mysql(解决xampp自启动和mysql.sock问题)
- mysql查询时间格式化(MySQL时间格式化)
- 把宽体丰田86卖了,换成7.5代高尔夫GTI玩起姿态与性能并存的改装(把宽体丰田86卖了)
- 大众推出了第五代高尔夫GT(大众推出了第五代高尔夫GT)
- 换代在即,现在是抄底 7.5代 高尔夫的最佳时机吗(换代在即现在是抄底)
- 2020年大众7.5代高尔夫R终结特别版 最后的呐喊(2020年大众7.5代高尔夫R终结特别版)
- 七年前的这部剧有毒,全剧只有女主红到发紫,男主至今无人认识(七年前的这部剧有毒)
- 宋轶除了演过于曼丽,原来还演过一个青楼女子(宋轶除了演过于曼丽)
热门推荐
- pythondjango图解(详解Django-restframework 之频率源码分析)
- 用javascript解析json(JavaScript JSON.stringify的使用总结)
- python连接到本地的mysql数据库(Python实现连接MySql数据库及增删改查操作详解)
- vscode react插件(基于visual studio code + react 开发环境搭建过程)
- 云服务器cvm什么意思(什么是云服务器cvm?怎么与普通物理服务器进行)
- SQL SERVER中与内存相关的计数器
- 阿里云服务器端口和ip(阿里云服务器如何添加安全通信端口?)
- css3背景渐变动画效果(css3制作的背景渐变动画效果)
- js原生tab栏切换(JavaScript实现简易tab栏切换案例)
- 如何测试idea启动tomcat成功(解决IDEA配置tomcat启动报错问题)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9