述語で使用するために SQL Server で変換するのに最適な短い日付は何ですか。
日付があり、短い日付部分を述語で2013-06-11 15:06:27.000
使用したいと考えています。2013-06-11
この目的のために SQL Server で変換するのに最適な短い日付は何ですか?
述語で使用するために SQL Server で変換するのに最適な短い日付は何ですか。
日付があり、短い日付部分を述語で2013-06-11 15:06:27.000
使用したいと考えています。2013-06-11
この目的のために SQL Server で変換するのに最適な短い日付は何ですか?
Select Convert(DateTime, Convert(VarChar, GetDate(), 12))
sqlserver 2008+を使用している場合、それほど難しくありません
cast(@date as date)
また
convert(date, @date)
あなたはsqlserver 2005を使用しているので
CONVERT(CHAR(10), @date, 121)
ただし、別の日付と比較する場合は、日時の形式を維持し、時刻の部分を削除します。
dateadd(day, 0, datediff(day, 0, @date))
SQL2005+ の場合:
注: Select Convert(DateTime, Convert(VarChar, DateTimeColumn, 12)) <operator> <const>
できませんSARG
!したがって、インデックスがある場合DateTimeColumn
、SQL Server はIndex Seek
この列をシーク ( ) できません。代わりに、SQL Server はIndex Scan
、Clustered Index Scan
またはを使用しますTable Scan
。
列の行をフィルター処理する場合は、または述語DATETIME
を使用できます。DateTimeColumn >= RangeStart AND DateTimeColumn < RangeEnd
DateTimeColumn BETWEEN RangeStart AND RangeEnd
どのように生成できますRangeStart
かRangeEnd
?
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))
これはどうですか?
SELECT CONVERT(CHAR(12),GETDATE(),12)