1

Ms SQL Server私は2005年(2008年)に次の構造の表を持っています

ID Name     AddDate                   AmendDate                 Status
-----------------------------------------------------------------------
1  Jason    2012-09-03 08:01:00.000   2012-09-03 14:02:00.000   Amended
2  Robert   2012-09-03 08:05:00.000   NULL                      New
3  Celia    2012-09-03 08:10:00.000   2012-09-03 14:02:00.000   Amended
4  Jason    2012-09-03 14:02:00.000   NULL                      New
5  Robert   2012-09-03 14:03:00.000   2012-09-03 20:02:00.000   Amended
6  Celia    2012-09-03 14:07:00.000   2012-09-03 20:02:00.000   Amended
7  Jason    2012-09-03 20:00:00.000   NULL                      New
8  Robert   2012-09-03 20:02:00.000   NULL                      New
9  Celia    2012-09-03 20:04:00.000   NULL                      New

ルーチンはスナップショットとして 1 日に 3 回実行されます。

SQLクエリを使用する方法を教えてください

  1. いずれかの日の朝 (または夕方) のすべてのレコードを選択します

  2. ISNULL(AmendDate, '2012.09.04')列の( ) をどのように置き換えることができますAmendDateNull value?AddDate <= '2012-09-01' and AmendDate >= '2012-09-02'

  3. 質問は約SELECT - FROM - WHERE -だけです

4

3 に答える 3

1

2. 質問に対して、このようなものが欲しいですか?表示しやすいため、パラメーターを使用しました。

  DECLARE @AddDate datetime

    SELECT *
    FROM yourTable
    WHERE 
    AddDate <= @AddDate 
    and AmendDate >= ISNULL(AmendDate,DATEADD(day, 1, @AddDate))
于 2012-09-04T07:35:56.917 に答える
1

最初の例では、日付に対してDATEPART関数を使用して時間を抽出し、朝または夕方に追加されたレコードに関心があるかどうかの基準を適用できます。

DATEPART(hh, AddDate) BETWEEN 0 AND 12 -- Morning.

2番目の質問は明確ではありません:(

于 2012-09-04T07:22:06.460 に答える
1

いずれかの日の朝・夕の全レコードを選択する

select *
from Table t
where t.AddDate > '2012-09-03' 
      and t.AddDate < '2012-09-04'
      and DatePart(HOUR, t.AddDate) < 12 -- Morning
      -- and DatePart(HOUR, t.AddDate) > 18 -- Evening

2番目の部分(要件があまり明確ではない場合)については、Coalesce関数をCTE

;WITH FullData(Id, Name, AddDate, AmendDate, Status)
     AS (SELECT t.Id,
                t.Name,
                t.AddDate,
                COALESCE(t.AmendDate, '2012-09-04'),
                Status
         FROM   Table t)
SELECT *
FROM   FullData d
WHERE  d.AddDate <= '2012-09-01'
       AND t.AmendDate >= '2012-09-02' 
于 2012-09-04T07:40:09.557 に答える