【问题标题】:Why is my SQL datetime being stored in the wrong format?为什么我的 SQL 日期时间以错误的格式存储?
【发布时间】:2017-11-02 11:44:56
【问题描述】:

我正在尝试通过经典 ASP 网站上的表单在 SQL 2014 Express 数据库中保存和检索日期和时间。

这背后的主要思想是,无论此脚本在何种设置下运行,时间格式都将始终相同。

我以dd-mm-yyyy hh:nn:ss 格式将日期和时间存储为datetime2 在SQL 中,但它却将其存储为yyyy-dd-mm hh:nn:ss。当我检索它写为dd/mm/yyyy hh:nn:ss AM/PM的日期时!为什么?

计算机已设置正确的时间和日期格式,SQL 数据库已设置为继承 Windows 时间和日期格式。

这段代码构造了我想要的时间格式(dd-mm-yyyy hh:nn:ss):

<%
Dim dd, mm, yy, hh, nn, ss
Dim datevalue, timevalue, dtsnow, dtsvalue

dtsnow = Now()


dd = Right("00" & Day(dtsnow), 2)
mm = Right("00" & Month(dtsnow), 2)
yy = Year(dtsnow)
hh = Right("00" & Hour(dtsnow), 2)
nn = Right("00" & Minute(dtsnow), 2)
ss = Right("00" & Second(dtsnow), 2)


datevalue = dd & "-" & mm & "-" & yy

timevalue = hh & ":" & nn & ":" & ss

dtsvalue = datevalue & " " & timevalue
%>

我尝试获取日期和时间并按降序排序。这部分有效,尽管它仍然采用错误的日期格式和 AM/PM,因此排序顺序看起来是随机的而不是按顺序排列的。

strSQL = "SELECT * FROM dbo.notes WHERE tag = '" & tagname & "' ORDER BY dt DESC"

因此,我尝试应用这些转换来使日期和时间恰到好处:dd-mm-yyyy hh:nn:ss

strSQL = "SELECT FORMAT(dt, 'dd-MM-yyyy HH:mm:ss', 'de-de') as tag,username,dt,note FROM dbo.notes WHERE tag = '" & tagname & "' ORDER BY dt DESC"

但这不起作用,因为它会出现“处理 URL 时服务器上发生错误”它同时写入日期和时间格式,但只有一个日期和时间存储在数据库中。

我该如何解决这个问题?

【问题讨论】:

  • 看起来您的 dt 列不是 DATETIME2 数据类型。
  • 如果列类型为DATETIME2(或其他日期/时间格式),则 SQL Server 将实际值存储在数据库中。当您存储日期/时间值时,您应该存储 实际值 - 而不是字符串表示形式。请参阅 stackoverflow.com/a/27403389/1110897 以获取一个很好的示例。同样,当您读取日期/时间值时,应将其存储在 DateTime 类型的变量中。
  • CONVERT(nvarchar(20), dt, 120)? Related.
  • 我已经用 FORMAT() 更新了 SQL 字符串
  • @SimonJensen 你不需要额外的SELECT 它应该只是SELECT FORMAT(SYSDATETIME(), 'yyyy-MM-dd HH:mm:ss', 'en-US') as tag, ...

标签: sql-server tsql datetime


【解决方案1】:

FORMAT() 是您正在寻找的 SQL Server 2012+ 函数:

SELECT FORMAT(SYSDATETIME(), 'yyyy-MM-dd hh:mm:ss', 'en-US');

会给你:2017-11-02 11:58:44

另外,如果我理解得很好,您的解决方案可能是找到正确的数据库排序规则。要检查当前的运行:

SELECT SERVERPROPERTY('collation');

您可以检查的最后一件事是SET DATEFORMAT,它应该会更改会话的环境设置。

【讨论】:

  • 谢谢。我已经添加了这个,这似乎有效。我归结为它混合了日期和月份。我尝试将其存储为 dd-mm-yyyy 但它似乎被读取为 mm-dd-yyyy...
  • 如果我真的可以,我希望数据库独立于排序规则设置。我真的不明白为什么它会在数据库中混合 dd 和 MM!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多