時間部分なしで現在の日付を取得する方法


83

SQL Server 2005では、時刻部分なしで現在の日付を取得するにはどうすればよいですか?私は使用していますGETDATE()が、00:00:00.0の時間があるようにしたいです

回答:


119

最速のレコードセットを反復処理する必要があるとSQL Server 2008で日付を持っていない場合

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に対して安全ではなく、「英国」の言語設定で失敗します。Tibor Karasziによるdatetimeデータ型の究極のガイドを参照してください


1
指定されたリンクは無効です。
ヴィスワナサンアイ

6

書式パターン(この場合は110)を指定してvarcharに変換してから、datetimeに変換(またはキャスト)する必要があります。

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.