0

这解释起来很复杂,所以我提前道歉。我在英国,所以这与英国的日期时间格式有关。

我有一个 VBS 正在提交到一个 ASP 页面,然后该页面插入到一个带有日期时间字段的 SQL 数据库中。

  • VBS 提交为:05/07/2013 05:04:12
  • ASP 流程为:05/07/2013 05:04:12
  • 这在 MSSQL 中显示为:2013-07-05 05:04:12.000

问题是我在 MSSQL 中的格式应该是 YYYY-MM-DD HH-MM-SS.000 - 它在上面插入为 YYYY-DD-MM HH-MM-SS.000

当我处理这些日期时,这会导致巨大的问题,因为它认为日期在未来。有趣的是,它似乎只发生在某些日期(我怀疑当天数高于 12 并且它知道月份不能是 13 时会发生这种情况,因此正确格式化它。

如何永久设置它以避免 SQL 以错误的方式插入日期?任何帮助,将不胜感激。

4

2 回答 2

1

您可以使用 SET DATEFORMAT,就像在这个例子中一样

declare @dates table (orig varchar(50) ,parsed datetime)

SET DATEFORMAT ydm;

insert into @dates
select '2008-09-01','2008-09-01'

SET DATEFORMAT ymd;
insert into @dates
select '2008-09-01','2008-09-01'

select * from @dates

参考

于 2013-05-07T11:03:24.603 回答
0

您始终可以在 SQL Server 语句中使用 ISO 格式。为此,我编写了一个函数。

function getIsoTimestamp(dt_in, s_time_zone, n_options)
        ' time zone format examples: "" = local time; "Z" = Zulu time/UTC, "+0100" = MEZ/CET
        ' options:
        '   1: remove time information
        '   2: remove date delimiter char
        '   4: remove time delimiter char
        dim s_out, s_year, s_month, s_day, s_hour, s_min, s_sec
        dim s_date_delim, s_time_delim

        s_out = ""

        if isDate(dt_in) then
                s_date_delim = iff((n_options AND 2)=2, "", "-")
                s_time_delim = iff((n_options AND 4)=4, "", ":")

                ' format date
                s_year = year(dt_in)
                s_month = Right(100 + month(dt_in), 2)
                s_day = Right(100 + day(dt_in), 2)
                s_out = s_year & s_date_delim & s_month & s_date_delim & s_day

                ' format time
                if (n_options AND 1)=0 then
                        s_hour = Right(100 + hour(dt_in), 2)
                        s_min = Right(100 + minute(dt_in), 2)
                        s_sec = Right(100 + second(dt_in), 2)
                        s_out = s_out & "T" & s_hour & s_time_delim & s_min & s_time_delim & s_sec & s_time_zone
                end if
        end if

        getIsoTimestamp = s_out
end function

你可以用getIsoTimestamp(now(), "", 0)它来测试它。

于 2013-05-07T12:46:43.513 回答