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日期转换出错的原因,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
- SqlParameter的size属性
- SQLite数据类型
- SQL Server获取时间段内的所有月份
- docker怎么连接mysql(docker如何安装mysql)
- sql查询语句casewhen是什么意思(SQL Server中使用判断语句IF ELSE/CASE WHEN 案例)
- mysql日期与时间函数(MySQL日期函数与时间函数汇总MySQL 5.X)
- mysql云数据库数据恢复(MySQL 利用frm文件和ibd文件恢复表数据)
- sqlserver存储过程参数默认值(sql server使用临时存储过程实现使用参数添加文件组脚本复用)
- sql启动错误代码1814(SQLMSSQLSERVER服务启动错误代码3414的解决方法)
- SQL Server遍历表中记录的方法
- windows docker 使用数据库教程(docker安装并持久化postgresql数据库的操作步骤)
- 修改sqlserver数据库所有者
- sqlserver查看某个库所有表(SQL Server怎么找出一个表包含的页信息Page)
- sql server网络配置
- 2021-10-04 01:06:07
- mysql8.0.20安装教程图解(mysql 8.0.24 安装配置方法图文教程)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
- 冰岛旅游攻略(冰岛旅游攻略及花费)
- 为什么现在年轻人越来越喜欢买衣服(为什么现在年轻人越来越喜欢买衣服穿)
- 怎么做好SEO(怎么做好seo内容优化)
- 冬季钓鱼子线用 长 还是 短(冬季钓鱼子线用)
热门推荐
- vuetable表格合并(vue-table实现添加和删除)
- dedecms二次开发(简单几步为DedeCMS实现LightBox效果)
- python中if条件语句如何使用(Python中如何使用if语句处理列表实例代码)
- python什么是深拷贝什么是浅拷贝(Python深拷贝与浅拷贝用法实例分析)
- SQL SERVER中查看一个数据库的表结构及字段
- js轮播图片(JS实现简单图片轮播效果)
- php微信支付流程(PHP实现微信退款的方法示例)
- 使用npoi将数据导出到一个EXCEL的多SHEET
- 简单两步修改Win系统远程桌面端口3389(简单两步修改Win系统远程桌面端口3389)
- 适合小白入门的mysql教程索引简介(一篇带给你MySQL高性能索引)