0

これは説明が非常に複雑ですので、あらかじめお詫び申し上げます。私は英国にいるので、これは英国の日時形式に関連しています。

ASP ページに送信する VBS があり、日時フィールドを使用して 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 に答える