【发布时间】: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