2017-08-22 21 views
0

誰かが私が間違っていることを指摘できることを私は考えていないことを願っています。 DATEADDを使ったのは初めてのことです。私は+ 7、+ 8を入れてみましたが、何もしませんでした。私は何が間違っているのか分かりません。私はその日の間ではなく、7日間の記録だけが必要です。最後に、文なしSQLは7日で有効期限が切れるレコードを取得します

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND A.EXPIRATION = DATEADD(DAY,7,GETDATE()) 

結果は、私を取得します。

ID   EMAIL   NUMBER   EXPIRATION 
530c [email protected]  C-0001 2017-08-29 00:00:00.000 

高度にありがとう。

答えて

3

SQL Serverでは、GETDATE()(名前にかかわらず)には時間コンポーネントがあります。だから、あなたはそれを削除する必要があります。

A.EXPIRATION = CONVERT(DATE, DATEADD(DAY, 7, GETDATE())) 
+0

あなたの仲間に感謝。それはそれをした!私は変換する必要がないと思ったのは、カラムがdatetimeのデータ型と言うプロパティであるからです。 – sergio089

0

私の推測では、それはた略語(月の例えばmm)を使用しているためDATEADDは、最初の引数としてDAYを受け入れることができないということですので、コードは次のようになります。

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND A.EXPIRATION = DATEADD(dd,7,GETDATE()) 

GETDATEは終了までの時間を追加し、私はまた、有効期限を推測していることは、あなたはおそらく現在の日付に7日を追加するので、時間の部分を持っているとしても、それはまったく同じになることは決してないだろう。あなたは、このような時間部分なしの両方を変換してみてください:

SELECT A.ID 
     ,B.EMAIL 
     ,A.NUMBER 
     ,A.EXPIRATION 

    FROM vw_RECORD AS A 
    LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
    WHERE NUMBER LIKE 'C%' 
    AND CONVERT(date, A.EXPIRATION) = CONVERT(date, DATEADD(dd,7,GETDATE())) 
+0

推測する必要はなく、ドキュメントは 'day'、' d'、 'dd'を表示します。 https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql –

+0

ドキュメントへのリンクありがとうございました。私は仕事中であるため、検索する時間がありませんでした。 、私は何かを必要とし、これを偶然見つけただけでstackoverflowの周りにスクロールしていた。 – MirzaS

0

これを試してみてください。

SELECT A.ID 
      ,B.EMAIL 
      ,A.NUMBER 
      ,A.EXPIRATION 
     FROM vw_RECORD AS A 
     LEFT JOIN vw_INFO AS B ON A.ID=B.ID 
     WHERE NUMBER LIKE 'C%' 
     AND DATEDIFF(DAY,A.EXPIRATION,GETDATE())=7 
関連する問題