0

datetime型のTASK_START_DATE列とTASK_FINISH_DATE列を持つテーブルがあります

タスクが次の場合にすべてのタスクを返すクエリについてサポートが必要です:(日付=日付のみ-SQL2008R2で日時から日付に変換できると思います。正常に動作します)

-現在の2週間以内日付または現在の日付から2週間後。

同様に、TaskEnd値が2週間前または2週間前のレコードも必要です

開始日が過去2週間以内のタスクを取得するようなことを試みてきましたが、TASK_FINISH_DATEについても同じことを行う必要があり、私のandとorはすべて混乱していると思いますので、助けていただければ幸いです。

Convert(Date, TASK_START_DATE) <=  Convert(Date, DateAdd(ww, -2, GetDate())) 

短いバージョン:将来または過去の2週間以内に、すべてのレコードをTASK_START_DATEまたはTASK_END_DATEと組み合わせるクエリを正しく作成するにはどうすればよいですか。

Select Task_ID, TASK_NAME, TASK_START_DATE, TASK_END_DATE
where 
???
4

3 に答える 3

2

比較のために日付に日を追加できます。

Select * from Table
Where column between getdate()-14 and getdate()+14
于 2012-05-17T17:13:44.300 に答える
2

「変換」機能を使用する必要はありません。「GetDate」関数は日時値を返し、列のタイプは日時です。次のように、日番号を直接追加できます。

Select * from Table
Where (TASK_START_DATE between getdate() - 14 and getdate() + 14)
or (TASK_FINISH_DATE between getdate() - 14 and getdate() + 14)
于 2012-05-17T17:21:17.047 に答える
0

where句で変数を宣言するか、比較日を指定できます。GETDATE()を使用して、DATETIMEオブジェクトを返すため、現在の日付/時刻を取得します。次に、DATEADDを使用して日、月、年などを調整します。次に、DATE型の変数に固定する前に、DATEADDに変換する必要があります。DATEADDメソッドでは、調整タイプ(D =日)を渡してから、+または-14日調整することに注意してください。

または、DATE変換を行わない場合は、14日前から分までを使用することもできます...変数宣言とwhere句から変換を削除する必要があります。ただし、必要な結果によって異なります。

DECLARE @twoWeeksAgo DATE = CONVERT(DATE, DATEADD(D, -14, GETDATE()));
DECLARE @twoWeeksAhead DATE = CONVERT(DATE, DATEADD(D, 14, GETDATE()));

SELECT 
    Task_ID, 
    TASK_NAME, 
    TASK_START_DATE, 
    TASK_END_DATE
FROM
    TABLE
WHERE 
    CONVERT(DATE, TASK_START_DATE) BETWEEN @twoWeeksAgo AND @twoWeeksAhead
    OR CONVERT(DATE, TASK_END_DATE) BETWEEN @twoWeeksAgo AND @twoWeeksAhead

また、WHERE句のBETWEEN演算子は包括的であることに注意してください。つまり、TASK_START_DATEが変数によって保持されている日付と等しいレコードが含まれます。たとえば、@ twoWeeksAheadと同じ値のレコードを除外する場合は、次のようなものを使用する必要があります。

WHERE 
    (CONVERT(DATE, TASK_START_DATE) >= @twoWeeksAgo 
        AND CONVERT(DATE, TASK_START_DATE) < @twoWeeksAhead)
    OR (CONVERT(DATE, TASK_END_DATE) >= @twoWeeksAgo 
        AND CONVERT(DATE, TASK_END_DATE) < @twoWeeksAhead)
于 2012-05-17T18:37:22.497 に答える