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) 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です