厳密には、メソッドa
最もリソースを消費しない:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
手元に時間がかかりすぎる人によって、同じ合計期間で100万行のCPU負荷が少ないことが証明されています。SQLServerで日付と時刻から日付を取得する最も効率的な方法は?
他の場所でも同様のテストがあり、同様の結果が得られました。
私はDATEADD/DATEDIFFを好みます。理由は次のとおりです。
- varcharは言語/日付形式の問題の影響を受けます
例:CASE式が非決定的であるのはなぜですか? - floatは内部ストレージに依存しています
- 「0」ベースを変更することで、月の初日、明日などを解決するように拡張されます
編集、2011年10月
SQL Server 2008以降の場合、date
にキャストできます つまり、CAST(getdate() AS date)
。または、date
を使用します データ型なのでtime
削除します。
編集、2012年1月
これがいかに柔軟であるかの実例:SQLサーバーでの丸められた時間または日付の数値で計算する必要がある
編集、2012年5月
これをWHERE句などで考えずに使用しないでください。列に関数またはCASTを追加すると、インデックスの使用が無効になります。ここで2番目を参照してください。一般的なSQLプログラミングの間違い
現在、これには、現在までのCASTを正しく管理している後のSQL Serverオプティマイザーバージョンの例がありますが、一般的に それは悪い考えになります...
2018年9月、datetime2の編集
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)