相关文章推荐
更新时间:2020年01月13日 08:42:12   作者:潇湘隐者
这篇文章主要介绍了SQL Server中日期转换出错的原因,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

开发人员有时候使用类似下面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; 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 语句中的 NULL值

    sql 语句中的 NULL值

    sql 语句中的 NULL值 ,需要的朋友可以看看。
    2009-11-11
  • SqlServer开发神器'SQLPrompt'插件的使用详解

    SqlServer开发神器'SQLPrompt'插件的使用详解

    SQLPrompt是Sql Server 开发智能提示插件,方便查询表结果,避免了开发人员一个个敲查询语句、执行语句等,这篇文章主要介绍了SqlServer数据库开发神器'SQLPrompt插件'的使用说明,需要的朋友可以参考下
    2023-03-03
  • SQL Server Alert发送告警邮件少了的原因

    SQL Server Alert发送告警邮件少了的原因

    这篇文章主要为大家详细介绍了SQL Server Alert发送告警邮件少了的原因,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 如何控制SQLServer中的跟踪标记

    如何控制SQLServer中的跟踪标记

    对于DBA来说,掌握Trace Flag是一个成为SQL Server高手的必要条件之一,在大多数情况下,Trace Flag只是一个剑走偏锋的奇招,不必要,但在很多情况下,会使用这些标记可以让你更好的控制SQL Server的行为
    2013-08-08
  • 在SQL触发器或存储过程中获取在程序登录的用户

    在SQL触发器或存储过程中获取在程序登录的用户

    每个用户可以登录系统,在程序中操作数据(添加,更新和删除)需要实现记录操作跟踪。是谁添加,更新和删除的,这些信息将会插入至AuditLog表中
    2012-01-01
  • SQL Server基础教程之游标(Cursor)

    SQL Server基础教程之游标(Cursor)

    这篇文章主要给大家介绍了关于SQL Server基础教程之游标(Cursor)的相关资料,游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行,需要的朋友可以参考下
    2023-11-11
  • SQLSERVER收集语句运行的统计信息并进行分析

    SQLSERVER收集语句运行的统计信息并进行分析

    例如语句的编译时间、执行时间、做了多少次磁盘读等,如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息。这些信息对分析问题很有价值,感兴趣的朋友可以了解下
    2013-01-01
  • SQL SERVER 2012新增函数之逻辑函数IIF

    SQL SERVER 2012新增函数之逻辑函数IIF

    这篇文章主要介绍了关于SQL SERVER 2012新增函数之逻辑函数IIF的相关资料,网上关于逻辑函数IIF的资料比较少,本文中的介绍的还是相对详细的,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • sqlserver实现树形结构递归查询(无限极分类)的方法

    sqlserver实现树形结构递归查询(无限极分类)的方法

    下面小编就为大家带来一篇sqlserver实现树形结构递归查询(无限极分类)的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • SQL堆叠注入简介

    SQL堆叠注入简介

    SQL堆叠注入,指的是在存在SQL语句交互的场景下,通过分号之间的间隔,使得能够一次性得执行多条SQL语句,今天通过本文给大家介绍SQL堆叠注入简介,感兴趣的朋友一起看看吧
    2022-08-08
 
推荐文章