当前位置: 首页 > 面试题库 >

为什么SQL Server会误解此ISO 8601格式日期?

安轶
2023-03-14
问题内容

为什么SQL Server(2005)会误解此ISO 8601格式日期?(YYYY-MM-DD)

DECLARE @FromDate DATETIME
SET @FromDate = '2013-01-05'
PRINT @FromDate
-- Prints: May  1 2013 12:00AM

文本格式的日期显然是1月5日,但由于某种原因,SQL Server会将其解释为5月1日。世界上没有YYYY-DD-
MM的日期格式,为什么会发生这种情况?我已经使用这种格式多年了,以前从未遇到过问题,因此我不确定在这种情况下有什么不同。

即使我使用CONVERT强制将其导入ISO8601,它仍然会出错:

DECLARE @FromDate DATETIME
SET @FromDate = CONVERT(VARCHAR, '2013-01-05', 126) 
PRINT @FromDate
-- Still prints: May  1 2013 12:00AM

编辑:糟糕-
我使用的是’CONVERT(VARCHAR,上面我的意思是CONVERT(DATETIME),所以这就是为什么没有生效的原因。谢谢@RBarryYoung

但是,如果我在不同的服务器(SQL 2012)上运行上述两个示例中的任何一个,它们都将正确打印’Jan 5 2013 12:00 AM’

这里发生了什么事?我认为将SQL格式与SQL Server一起使用的主要原因之一是它使月份和日期变得毫不含糊?


问题答案:

它仅对于较新的数据类型(date/ datetime2)而言是明确的

为了向后兼容,它仍然依赖于dateformat datetime

在SQL Server 2012上

SET DATEFORMAT DMY

SELECT CAST('2013-01-05' AS DATETIME),   /*May*/
       CAST('2013-01-05' AS DATETIME2),  /*Jan*/
       CAST('20130105' AS DATETIME),     /*Jan*/
       CAST('20130105' AS DATETIME2)     /*Jan*/

yyyymmdd在处理这些数据类型时,可以将其用作明确的格式。

请参阅日期时间数据类型的最终指南(unseparated在该文章中称为格式)



 类似资料:
  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 有没有办法将ISO8601日期与Java进行比较?比如,知道字符串日期是否是良好的格式,知道月份是否为负数,以及 我还在搜索如何知道互联网上是否有课程可以比较两个ISO8601日期?比如,如果我有:2000-12-12和1999-05-06。我如何比较这两个日期,使之在年、月和日之间有准确的差异?

  • 问题内容: 前三行工作正常。当我再次尝试将字符串解析为日期时,出现错误。我该如何解决? 错误看起来像这样: 问题答案: 为我工作。在模式末尾使用“ SSSZ”而不是“ SZ”。

  • 问题内容: 如何转换此 格式 ( ISO8601格式 ): 2014-03-13T09:05:50.240Z 为此( MySQL DATE格式 ): 2014-03-13 在PHP中? 问题答案: 尝试这个 完整的日期功能文档可以在这里找到:http : //php.net/manual/en/function.date.php PHP函数“ strtotime”不执行任何其他操作,然后将您的时间

  • 因此,有一个关于web应用程序的部分,用户可以向其中输入事件,web服务将这些事件以以下格式发送到移动应用程序: 我在尝试将字符串转换为日期时遇到了问题,这样我就可以从事件中获得时间(也可以在正确的时区中格式化),例如,这里有一个出现在“2015-03-20T20:00:00-07:00”上的字符串,当我拉动时,时间应该是太平洋时间1PM。但我得到的不是8PM就是3AM(这取决于我是否将UTC缩写

  • 问题内容: SimpleDateFormat: 抛出的异常: 有任何想法吗? 编辑: 感谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我可能应该把它称为一天。 问题答案: 从SimpleDateFormat javadocs : 月:如果图案字母的数目为3或更多,则将月份解释为文本;否则,将其解释为数字。 尝试使用“ MMM dd yyyy”之类