THEN句の条件を確認する必要があります。これはCASE
の文です。例の下に上記のクエリのsqlserverのCASE文のTHEN句で条件を確認する方法
SELECT *
FROM SampleTable t
WHERE
CASE
WHEN (t.producttypeid = 1)
THEN (CAST(CONVERT(NVARCHAR(30), CAST(t.releasedate AS DATETIME), 111) AS DATETIME) >= CAST(CONVERT(NVARCHAR(30), CAST(t.createddate AS DATETIME), 111) AS DATETIME))
WHEN (t.producttypeid IN (2, 3))
THEN (CAST(CONVERT(NVARCHAR(30), CAST(t.createddate AS DATETIME), 111) AS DATETIME) >= CAST(CONVERT(NVARCHAR(30), CAST(t.releasedate AS DATETIME), 111) AS DATETIME))
END
説明を見つけてください:上記のクエリのWHERE句で、私はproducttypeidをチェックするためcase文を使用して、私はRELEASEDATEとCreatedDateにの日付をチェックする必要がproducttypeidの値に基づいて。
しかし、クエリの上には、構文エラーの下に与える: '>' の近くに
*不正な構文を。
付近に正しくない構文「)」。*
私は2つのselect文と組合と個別の句を使用することにより、上記の課題を達成しました。以下のクエリを見つけてください
SELECT *
FROM SampleTable t
WHERE CAST(CONVERT(NVARCHAR(30), CAST(t.releasedate AS DATETIME), 111) AS DATETIME) >= CAST(CONVERT(NVARCHAR(30), CAST(t.createddate AS DATETIME), 111) AS DATETIME))
UNION
SELECT *
FROM SampleTable t
WHERE CAST(CONVERT(NVARCHAR(30), CAST(t.createddate AS DATETIME), 111) AS DATETIME) >= CAST(CONVERT(NVARCHAR(30), CAST(t.releasedate AS DATETIME), 111) AS DATETIME))
ですので、日付チェックはCASE文に基づいてTHEN句で行う必要があります。
しかし、私は単一の選択クエリで上記のタスクを達成したいと思います。この点について私を助けてください。
ありがとうございます。
あなたは 'releasedate'と' createddate'を保存するためにどのようなデータ型を使用していますか?私は最初に日付に、次に文字列に、二重変換によって少し混乱しています。 –
DateTimeデータ型を使用しています。日付の比較のみをチェックするには二重変換が必要です。私は時間を考慮していない。 – Vijay
'CAST(DateTimeField_1 AS DATE)= CAST(DateTimeField_2 AS DATE)...'のように単純化することができます。読みやすく、入力がすばらしくなければなりません。あなたが@faflがあなたを助けてくれたら[回答を受け入れる]ことを検討してください(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。これは寄稿者に報酬を与え、他の人が実際の解決策を見つけるのを助ける。 –