4

返されるデータを、当月の開始日と終了日を持つポイント (アクティブなプロジェクト) のみに制限しようとしています。今日は月の最終日であるため、動作に問題があります。明日も問題になると思います(サンプルに6月のデータは含まれていません)。

これが私のデータセットです(表1):

Project                      User                 Effort  Start_Date End_Date
-------                      -------              ------  --------   --------
Traffic Control              DOMAIN\john.smith    0.1     5/1/2013   5/31/2013
Turboencabulator Analysis    DOMAIN\mark.webber   0       5/1/2013   5/31/2013
Widget Calibration           DOMAIN\mark.webber   0       5/1/2013   5/31/2013
Gizmo Creation               DOMAIN\steve.green   0.1     5/1/2013   5/31/2013
Advanced Toolmaking          DOMAIN\steve.green   0.6     5/1/2013   5/31/2013
Diesel Engine Diagnostics    DOMAIN\steve.green   0.05    5/1/2013   5/31/2013
Cold Fusion Reactor Creation DOMAIN\steve.green   0.3     5/1/2013   5/31/2013

今日、次のクエリを使用すると、結果が返されません。

SELECT * FROM dbo.table1
WHERE Start_Date <= (getdate()) AND End_Date >= (getdate())
ORDER BY User, Start_Date

昨日は無事に帰ってきました。6 月のデータもあります (私のサンプルには表示されていません) が、当月のデータが 1 か月を通して確実に返されるようにステートメントを変更する必要があります。

回答 - 正しい WHERE ステートメント (以下の回答のコメントから):

WHERE (Month(Start_Date) <= Month((getdate())) AND Month(End_Date) >= Month((getdate()))) AND (YEAR(Start_Date) <= YEAR((getdate())) AND YEAR(End_Date) >= YEAR((getdate())))
4

6 に答える 6

0

を使ってみてくださいconvert(date, GetDate())GetDate()

日付は、秒未満を意味するティックとして表されます。GetDate() (たとえば 2013-05-31 11:09:45:1024 で、mssql のミリ秒の精度が不明) を比較すると、時間/分のため、常に 2013-05-31 より大きくなります。 /秒。あなたの2つの選択肢は比較することYOURDATE >= Start_Date AND End_Date + 1 > YOURDATEです、またはYOURDATE >= Start_Date AND End_Date >= convert(date, YOURDATE)

最初のオプションは、終了日の翌日 (つまり、基本的にはその日の最後) よりも厳密に小さいことを要求し、2 つ目のオプションは、ティックを無視して、終了日と同じ日内であることを要求します。両方ともまったく同じ結果が得られます。どちらかのほうがパフォーマンスが高い可能性がありますが、その点については私はお手伝いできません。

編集:または、他の2つの答えを使用できますが、常に毎月の期間を使用する場合にのみ機能します。その場合、データベースを再設計して、月を表す 1 から 12 のフィールドのみを持つようにする方が簡単です。

于 2013-05-31T15:13:16.303 に答える
0

MySql では、x 日以内にデータを更新するために似たようなものを使用します。おそらく次のようなものです: start_date <= DATE_SUB(curdate(), INTERVAL 10 DAY); 10 を必要な日数に変更するだけです。

于 2013-05-31T15:16:16.930 に答える