为什么你SQL Server中SQL日期转换出错了呢?「建议收藏」

为什么你SQL Server中SQL日期转换出错了呢?「建议收藏」开发人员有时候使用类似下面SQL将字符串转换为日期时间类型,乍一看,这样的SQL的写法是没有什么问题的。但是这样的SQL其实有时候就是一个定时炸弹,随时可能出现问题(),下面简单对这种情况进行一个简单

为什么你SQL Server中SQL日期转换出错了呢?

开发人员有时候使用类似下面SQL将字符串转换为日期时间类型,乍一看,这样的SQL的写法是没有什么问题的。但是这样的SQL其实有时候就是一个定时炸弹,随时可能出现问题(),下面简单对这种情况进行一个简单概括。

 

SELECT  CONVERT(DATETIME, "2020-01-13 6:46:42");

代码100分

 

 

如果你将连接数据库的登录名的默认语言修改为Aribc,然后去执行上面SQL语句,就会遇到错误,为什么呢?

 

clip_image001

 

 

为什么上面SQL的日期转换出错了呢?其实是因为登录名修改默认语言后,会话对应的date_format变化了,从mdy变成了dmy,所以上面转换就报错了,有时候不报错,但是可能转换成一个错误日期,产生了逻辑错误,这个反而是一个跟糟糕的隐性错误。等你发现的时候,可能已经产生大量错误数据了。

 

代码100分SELECT  session_id

       ,program_name

代码100分       ,client_interface_name

       ,language

       ,date_format

FROM    sys.dm_exec_sessions

WHERE   session_id = 53;

 

clip_image002

 

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

 

sp_helplanguage “us_english”

 

 

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

 

SET DATEFORMAT DMY;

GO

SELECT  CONVERT(DATETIME, "2020-01-13 6:46:42");

 

clip_image003

 

 

这种情况就比较复杂了,有可能是某一段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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10249.html

(0)
上一篇 2023-01-22 16:30
下一篇 2023-01-22

相关推荐

  • ORDER BY导致索引使用不理想「建议收藏」

    ORDER BY导致索引使用不理想「建议收藏」在MySQL中经常出现未按照理想情况使用索引的情况,今天记录一种Order by语句的使用导致未按预期使用索引的情况。 1. 问题现象 1.1 SQL语句: SELECT DISTINCT p.* F

    2022-12-21
    145
  • 怎样优化oracle数据库,有几种方式_数据库设计的技巧

    怎样优化oracle数据库,有几种方式_数据库设计的技巧数据库之Oracle优化技巧(一) 1.where子句中的连接顺序 在Oracle数据库中,where子句的执行顺序是自下而上进行解析,根据这个原理,表之间的连接必须写在其他where条件之前,那些可

    2023-03-06
    141
  • redis数据库持久化问题处理「建议收藏」

    redis数据库持久化问题处理「建议收藏」redis数据库问题整理一、数据无法持久化1、背景介绍:经开发人员告知redis有3万多条数据无法写入内存,数据持久化停滞状态。2、排查过程:经过排查redis日志,发现报错信息如下,经过查询得知为…

    2023-03-25
    145
  • Python Threading 如何停止线程

    Python Threading 如何停止线程Python中线程模块(threading)提供一个很好的多线程编程的方式。线程模块被设计为易于使用的面向对象的API。但是,线程在使用中也容易产生一些问题,其中之一是如何合理地停止线程。本篇文章将介绍Python Threading如何停止线程并防止产生一些常见的问题。

    2024-05-13
    72
  • PS涂抹工具快捷键大全

    PS涂抹工具快捷键大全Photoshop是设计师们最熟悉的软件之一,而在设计中,涂抹工具是一个非常重要的工具。为了让大家更加高效地使用Photoshop,本文将介绍涂抹工具的快捷键大全。

    2024-06-17
    51
  • PostgreSQL 数据库开发规范「终于解决」

    PostgreSQL 数据库开发规范「终于解决」PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的。

    下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreS

    2023-06-11
    137
  • openGauss SQL引擎(下)——查询优化[通俗易懂]

    openGauss SQL引擎(下)——查询优化[通俗易懂]上一篇[openGauss SQL引擎 (上)]中我们介绍了SQL引擎概览、SQL解析以及查询优化器的优势和优化技术的分类,本文将详细介绍查询优化的相关内容。 (一)查询重写 查询重写利用已有语句特…

    2023-04-13
    147
  • 优化Python GUI布局的秘诀——使用minsize属性

    优化Python GUI布局的秘诀——使用minsize属性在使用Python编写GUI应用程序时,我们通常需要摆放各种控件,如文本框、按钮、标签等。这些控件需要放在不同的容器中,如Frame、Grid等。在布局这些控件时,我们需要指定每个控件的大小和位置。在这个过程中,我们经常会遇到某个控件应该有足够的空间来显示内容,但它却被另一个控件挤得很小或被其他控件覆盖住了。为了解决这个问题,我们可以使用minsize属性。

    2024-04-11
    77

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注