SQL Server 2005では、時刻部分なしで現在の日付を取得するにはどうすればよいですか?私はGETDATE()
を使用していますが、00:00:00.0の時間にしたいと考えています
fastestレコードセットを反復処理する必要があり、SQL Server 2008に日付がない場合
_SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
_
StackOverflowに関する2つの異なる優れた答えがこれを裏付けています: One 、 Two
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)
編集:
決定論について述べたように、スタイル112を使用しない限り、varcharメソッドは安全ではありません。
ここでの他の回答は、これを列に適用しないことを指摘しています。これは正しいですが、10万行を選択するか、計算列またはGROUP BY日付のみを追加することもできます。次に、このメソッドを使用する必要があります。
もう1つの回答ではスタイル110についても言及しています。これは言語またはSET DATEFORMATの安全ではなく、「イギリス」の言語設定では失敗します。 日時データ型の最終的なガイドを参照 Tibor Karaszi著。
これを、フォーマットパターン(この場合は110)を指定してvarcharに変換し、次に変換(またはキャスト)して日時に戻す必要があります。
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)