ISO long(112)でうまくいきます:
SELECT CONVERT(INT, CONVERT(VARCHAR(8), GETDATE(), 112))
getdate()をISO 112でintに直接キャストすると、何らかの理由で41008が得られますが、VARCHARを介して実行することは機能しているようです。より高速なキャストを考えている場合は更新します。
編集:int only vs varcharの議論に関して、ここに私の発見があります(私のテストリグとプロダクションサーバーで繰り返すことができます)Varcharメソッドは50万回のキャストでより少ないCPU時間を使用しますが、全体的にわずかに遅くなります-何十億もの行
編集2:キャッシュと異なる日付をクリアするようにテストケースを改訂
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
SET STATISTICS TIME ON;
WITH RawDates ( [Date] )
AS ( SELECT TOP 500000
DATEADD(DAY, N, GETDATE())
FROM TALLY
)
SELECT YEAR([Date]) * 10000 + MONTH([Date]) * 100 + DAY([Date])
FROM RawDates
SET STATISTICS TIME OFF
(500000 row(s) affected)
SQL Server Execution Times:
CPU time = 218 ms, elapsed time = 255ms.
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
SET STATISTICS TIME ON;
WITH RawDates ( [Date] )
AS ( SELECT TOP 500000
DATEADD(DAY, N, GETDATE())
FROM TALLY
)
SELECT CONVERT(INT, CONVERT(VARCHAR(8), [Date], 112))
FROM RawDates
SET STATISTICS TIME OFF
(500000 row(s) affected)
SQL Server Execution Times:
CPU time = 266 ms, elapsed time = 602ms