厳密に言えば、メソッドa
は最もリソースを消費しません。
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
同じ合計期間で100万行のCPUをあまり消費しないことが証明されており、手作業が多すぎる場合:SQL Serverで日付と時刻から日付を取得する最も効率的な方法は?
他の場所でも同様のテストを見て、同様の結果を得ました。
私はDATEADD / DATEDIFFを好みます。
- varcharは言語/日付形式の問題の影響を受けます
例:なぜ私のCASE式は非決定的ですか?
- floatは内部ストレージに依存しています
- 「0」ベースを変更することにより、月の初日、明日などのワークアウトに拡張
編集、2011年10月
SQL Serverの2008+について、あなたはにキャストすることができますdate
すなわちCAST(getdate() AS date)
。または、date
データ型を使用して、削除する時間がないようにします。
編集、2012年1月
これがいかに柔軟であるかを示す実例:SQLサーバーで丸められた時間または日付の数値で計算する必要がある
編集、2012年5月
考えずにWHERE句などでこれを使用しないでください。関数またはCASTを列に追加すると、インデックスの使用が無効になります。ここ2を参照してください:http : //www.simple-talk.com/sql/t-sql-programming/ten-common-sql-programming-mistakes/
現在、これには、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)