开发人员有时候使用类似下面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_formatFROM    sys.dm_exec_sessionsWHERE   session_id = 53;

关于不同语言的默认date_format,可以使用下面命令查看:

sp_helplanguage 'us_english'

另外一种情况,如果当前会话使用SET命令修改过DATEFORMAT,也会遇到这个错误,如下所示:

SET DATEFORMAT DMY;GOSELECT  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 datetime格式_为什么你SQL Server中SQL日期转换出错了呢?相关推荐

  1. java date 日期格式_如何将JAVA DATE类型的日期 转换成指定格式类型的 (如:YYYY-MM-DD) 的 DATE类型数据?...

    展开全部 Date类型并没有格式32313133353236313431303231363533e58685e5aeb931333433653262,只有转换成String格式的时候让格式化显示. n ...

  2. sql解析json格式字段、sql关联json格式字段,mysql解析json、sql解析json字符串

    sql解析json格式字段.sql关联json格式字段,mysql解析json.sql解析json字符串 sql解析字符串 sql关联json中的某个字段 sql解析字符串 表名user_login ...

  3. sql活动监视器 死锁_使用system_health扩展事件监视SQL Server死锁

    sql活动监视器 死锁 Performance monitoring is a must to do the task for a DBA. You should ensure that the da ...

  4. sql server jar包_老王,怎么完整SQL的显示日志,而不是???...

    点击蓝色"Java面试那些事儿"关注我哟 加个"星标",优质文章,第一时间送达 来源:http://1t.click/ag6q在常规项目的开发中可能最容易出问题 ...

  5. Sql 中常用日期转换Convert(Datetime)

    CONVERT(data_type,expression[,style])  convert(varchar(10),字段名,转换格式) 说明: 此样式一般在时间类型(datetime,smallda ...

  6. asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02

    本文主要梳理<对比Excel,轻松学习SQL数据分析>对于自己有用的sql知识.这本书中的所有代码和函数均适用于my sql 8.0版本. SQL的基本功能数据定义(DDL)--对数据库, ...

  7. sql azure 语法_Azure Kubernetes服务(AKS)中SQL Server

    sql azure 语法 In this article, we will review how to create a Kubernetes cluster in Azure Kubernetes ...

  8. python to_excel 时间格式_分别用Excel和python进行日期格式转换成时间戳格式

    最近在处理一份驾驶行为方面的数据,其中要用到时间戳,因此就在此与大家一同分享学习一下. 1.什么是时间戳? 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01 ...

  9. 将整数k转换成实数python表达式_在混合类型表达式中python自动转换intlongfloat例如.ppt...

    在混合类型表达式中python自动转换intlongfloat例如 空位:格式指示符,描述了填入的值的输出形式. %. 类型字符: 宽度:用多少位置显示数值. 省略或指定为0:根据值的实际长度显示. ...

最新文章

  1. 最快的ASP无组件上传类(4M只需10秒)0.96版
  2. python项目归纳总结-【第108期】总结最近项目中常用的几个Python库
  3. 交交变换电路学习笔记
  4. 深入理解Java虚拟机——JVM类加载机制(类加载过程和类加载器)
  5. Django日志模块配置
  6. C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
  7. ext不能选中复制属性_复制拷贝文件不怕再出错,一个超级好用的小工具,支持多线程工作...
  8. 使用labview读取一副位图,并进行BCG校准(或修改其BCG)程序解析
  9. 联想一体机电源键不亮_联想电脑一体机B505拆机经验
  10. java web service简单示例
  11. 论文浅尝 | 通过文本到文本神经问题生成的机器理解
  12. 探秘盒马机器人餐厅:老外目瞪口呆,90岁奶奶狂点赞
  13. Linux系统里如何重装ibus,Linux下安装ibus-rime的方法
  14. 在Unity内使用对象池并实现线程安全的单例模式
  15. ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
  16. Mac 2016 运行Emacs,M-x键失效问题
  17. 人脸方向学习(十七):Face Detection-论文整理-解读
  18. 模型参数选择方法——GridSearch网格搜索
  19. 力扣题目系列:322. 零钱兑换
  20. 高德地图入驻广州交警 实现“互联网+交通”无缝对接

热门文章

  1. java轻量级IOC框架Guice
  2. s5pv210 uboot-2012-10移植(三) 之支持SPL
  3. AJAX俺也不会,是真的,不过,以后就会了
  4. 区块链经济时代得“先机”者得天下!
  5. golang实现图片上传
  6. redis 导出导入详解
  7. ActiveMQ入门教程(三) - ActiveMQ P2P版的HelloWorld
  8. PMBOK学习笔记二-项目管理过程
  9. 在Visual Studio中启用对jquery等javascript框架的智能感知
  10. Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法