SQL Server 2005で、時間部分なしで現在の日付を取得するにはどうすればよいですか? GETDATE()
を使用していますが、00:00:00.0
回答
レコードセットを反復処理する必要があり、SQL Server2008に日付がない場合の最速
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
StackOverflowに関する2つの異なる優れた回答が、これを裏付けています。 1つ、 2つ
Varchar変換は、それを行うための最悪の方法の1つです。もちろん、1つの値については重要ではないかもしれませんが、「入るのは良い習慣です。
この方法も決定論的です。 、計算列にインデックスを付ける場合などです。 SQL Serverに関する本を書いている人でさえ、日時変換に追いついています
この手法も拡張可能です。
- 昨日:
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
- 月の初め:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
- 最後の終わり月:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
- 来月の開始:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
編集:
決定論について述べたように、varcharメソッドはスタイル112を使用しない限り安全ではありません。
ここでの他の回答は、これを列に適用することは決してないことを指摘しています。これは正解ですが、10万行を選択するか、計算列またはGROUP BY日付のみを追加することをお勧めします。その場合は、この方法を使用する必要があります。
もう1つの回答は、スタイル110についても言及しています。これは言語またはSETではありません。 DATEFORMATは安全で、「british」言語設定で失敗します。 TiborKarasziによる日時データタイプの究極のガイドを参照してください。
コメント
- 提供されたlin kは死んでいます。
回答
フォーマットパターン(この場合は110)を指定してvarcharに変換する必要がありますケース)次に、日時に変換(またはキャスト)します。
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)