4

述語で使用するために SQL Server で変換するのに最適な短い日付は何ですか。

日付があり、短い日付部分を述語で2013-06-11 15:06:27.000使用したいと考えています。2013-06-11

この目的のために SQL Server で変換するのに最適な短い日付は何ですか?

MSDN - 日付変換

4

5 に答える 5

5
Select Convert(DateTime, Convert(VarChar, GetDate(), 12))
于 2013-07-24T07:12:18.660 に答える
4

sqlserver 2008+を使用している場合、それほど難しくありません

cast(@date as date)

また

convert(date, @date)

あなたはsqlserver 2005を使用しているので

CONVERT(CHAR(10), @date, 121)

ただし、別の日付と比較する場合は、日時の形式を維持し、時刻の部分を削除します。

dateadd(day, 0, datediff(day, 0, @date))
于 2013-07-24T07:07:10.330 に答える
1

SQL2005+ の場合:

注: Select Convert(DateTime, Convert(VarChar, DateTimeColumn, 12)) <operator> <const>できませんSARG!したがって、インデックスがある場合DateTimeColumn、SQL Server はIndex Seekこの列をシーク ( ) できません。代わりに、SQL Server はIndex ScanClustered Index Scanまたはを使用しますTable Scan

列の行をフィルター処理する場合は、または述語DATETIMEを使用できます。DateTimeColumn >= RangeStart AND DateTimeColumn < RangeEndDateTimeColumn BETWEEN RangeStart AND RangeEnd

どのように生成できますRangeStartRangeEnd

    DECLARE @SelectedDate DATETIME;
    SET     @SelectedDate='2013-06-11 15:06:27.000';

    SELECT  DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0) AS Start,
            DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0) AS [End 1],
            DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0)) AS [End 2]

注 2 :DATETIME列の場合、最後のミリ秒はこれらのいずれかになります{0,3,7}( BOLを参照)。

結果:

Start                   End 1                   End 2
----------------------- ----------------------- -----------------------
2013-06-11 00:00:00.000 2013-06-12 00:00:00.000 2013-06-11 23:59:59.997

例 #1:

...
WHERE   h.OrderDate>=DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0)
AND     h.OrderDate<DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0)

例 #2:

...    
WHERE   h.OrderDate>=DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0)
AND     h.OrderDate<=DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0))

例 #3:

...
WHERE   h.OrderDate BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0) AND DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0))
于 2013-07-24T07:42:18.780 に答える
1

これはどうですか?

SELECT CONVERT(CHAR(12),GETDATE(),12)
于 2013-07-24T07:09:01.910 に答える