64

この質問にはすでに答えがあります。

DELETE from Table WHERE Date > GETDATE();

GETDATE()は時間を含みます。得る代わりに

2011-01-26 14:58:21.637

どうすれば入手することができますか:

2011-01-26 00:00:00.000


  • また、あなたが望むかもしれないと考えて>=のではなく>または、実際には2011-01-26 00:00:00.000のレコードを削除するのを忘れてしまいます... - Matt Gibson
  • 良いコメント、私は実際にこのコメントを読む前にそれを変更しました:) - sooprise
  • 簡単な解決策はcast(left(getdate(), 11) as datetime) - Mohammad Anini

7 답변


70

SQL Serverへのわずかなバイアス

概要

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

SQL Server 2008はdateと入力します。だからちょうど使う

CAST(GETDATE() AS DATE)

編集:1日を追加するには、「ゼロ」の前の日と比較します

DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)

サイバーキウィから:

2つの機能を必要としない別の方法は、(+1は角かっこの内側または外側にあります)です。

DATEDIFF(DAY, 0, GETDATE() +1)

DateDiff数値を返しますが、あらゆる目的のために、これをVARCHARに直接変換することを除いて、この式を使うつもりであればいつでも日付として機能します。その場合はGETDATE()でCONVERTアプローチを直接使います。

convert(varchar, GETDATE() +1, 102)


  • この値に1日を追加する方法 - sooprise
  • CASTを選択(GETDATE()+ 1 AS DATE) - eidgenossen
  • @eidgenossen:単純ですが、暗黙の型変換に依存しています。あまり明確ではありません。 - gbn

9

SQL Server 2008の場合、最もインデックスに優しい方法は次のとおりです。

DELETE from Table WHERE Date > CAST(GETDATE() as DATE);

以前のバージョンのSQL Serverでは、日付の計算はvarcharへの変換よりも速く動作します。地域の設定により、varcharに変換しても間違った結果が出ることがあります。

DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());

注:ラップする必要はありません。DATEDIFF他のとDATEADD


  • "古い" DATEADDを使用しないスタイルは、暗黙的にintからdateへの変換に依存します。優先順位。これは実際には事実上DATEADDです。これはよりきれいに見えますが、私は明示的な変換を自分で好みます。 - gbn
  • QOがそれをどのように行っているのかわからないが、手動でDATEADDを要求する理由はない。データ型はdatetimeですが、internally比較するとき、それは数値に変換されます、それでそれはちょうどintとしてそれを残すことがより良いかもしれません。 - RichardTheKiwi

7

データベースによって異なります。使用しているデータベースエンジンを指定していません。

例えばPostgreSQLではあなたはキャストします(日付としてのmyvalue)。



5

SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))


  • 101は何のためのものですか? - sooprise
  • 出力文字列の形式、この場合はmm / dd / yyyy hh:mm:ssを決定します。したがって、時間部分を切り捨てるvarchar(10)。 - JohnOpincar

0

あなたが使用することができます

DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);


  • それは文字列を返します。暗黙的な変換に頼らないことをお勧めします。代わりに、それを明示的に日付または日付/時刻にキャストしてください。 - Leigh

-1

CONVERT(varchar,GETDATE(),102)


  • 102は何のためのものですか? - sooprise
  • 101、102などはCONVERT関数の単なるパラメータです。私はあなたが実際にmm / dd / yyyyの形である101を使いたいと思うかもしれないと思いますが、102はmm.dd.yyyyの形であると思います... - Saggio
  • それは文字列を返します。暗黙の型変換に頼るのではなく、明示的に日付にキャストするのが最善です。 - Leigh

-1

ここではいくつか解決策があります。

http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm


  • 申し訳ありませんが、そのリンクは不完全です。dateadd / datediff手法を考慮していません - gbn

リンクされた質問


関連する質問

最近の質問