0

SQLServer2008に対してこのクエリを実行しようとしています。

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = getdate()

SentDateが「2012-7-13」に設定された1行がある場合でも、これは0行を返します。



このSQLステートメントは正常に機能します。

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = '2012-7-13'

1行を返します。



getdate()を使用すると機能しないのはなぜですか?

4

5 に答える 5

4

SQL Server 2008の場合:

WHERE SentDate >= CONVERT(DATE, GETDATE())
  AND SentDate <  DATEADD(DAY, 1, CONVERT(DATE, GETDATE());

(またはそれがDATE列の場合)

WHERE SentDate = CONVERT(DATE, GETDATE());

<SQL Server 2008の場合:

WHERE SentDate >= DATEDIFF(DAY, 0, GETDATE())
  AND SentDate <  DATEDIFF(DAY, -1, GETDATE());
于 2012-07-13T18:50:32.433 に答える
2

型変数だといいSentDateですdatetimeね。

その場合は、日時から時刻を削除してみてください。

SELECT DATEADD(d, DATEDIFF(d, 0, GetDate()), 0)

したがって、クエリは次のようになります。

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = DATEADD(d, DATEDIFF(d, 0, getdate()), 0)

2008を使用している場合は、コメントに記載されているとおりに実行できますCAST(GetDate() as date)

それを表現するより簡単な方法は次のとおりです。

SELECT Count(*)
FROM tblSharesSentRequests
WHERE [SentDate] = cast(getdate() as date)

Dateタイプは、ではなく、単なるaになりましたdatetime。これに対する答えは、以下を使用することでした。

WHERE SentDate = CONVERT(Date, GetDate())

于 2012-07-13T18:47:16.240 に答える
0

これを試して:

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
于 2012-07-13T18:49:27.773 に答える
-1

SQL関数GETDATE()は、日付と時刻を返します。あなたはそれを私が推測している日付しかないフィールドと比較しています。次のようなことをする必要があります。

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(GETDATE() AS date)
于 2012-07-13T18:53:24.550 に答える
-1

getdate()は、時分などを提供する日付だけでなく、完全に一致しなかったため、0の値を取得しました。最善の方法は、SELECT Count(*)FROM tblSharesSentRequests WHERE [SentDate] = cast(getdate()as date)です。

于 2012-07-13T18:54:23.020 に答える