以下のtsqlクエリを開発しています。 「1900%」を含むレコードはどのようにして識別できますか?T-SQLでDATETIME NULLレコードを識別する方法は?
SELECT DISTINCT TICKET, COMPLAINT_LEVEL, COMPLETION_DATE, DATE_FILTER, YEAR(DATE_FILTER) AS YEAR_FILTER, MONTH(DATE_FILTER) AS MONTH_FILTER,
left(datename(month, DATE_FILTER), 3) + ' ''' +
RIGHT(year(DATE_FILTER), 2) AS SHORT_DATE_FILTER,
CASE WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND COMPLETION_DATE IS NULL THEN DATE_FILTER
WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND
COMPLETION_DATE IS NOT NULL AND ABS(DATEDIFF(DAY, COMPLETION_DATE, MONTH_END)) >= 1 AND DATE_FILTER < CURRENT_DATE_END THEN DATE_FILTER
ELSE 0 END AS ROW_TYPE
FROM #TEMP
--WHERE row_type = 0
--line above does not work
そして、このことは、NULL値を持って何の日時が存在しないと思われ
上記のSQLでは動作しません。計算列と比較することはできません。それでも、それは1900年の最初の日にしか動作しません。しかし、それはテストデータによれば十分であるようです。 –
数値は 'date'データ型と互換性がありません。しかし、 'ROW_TYPE'は明らかに' datetime'です。なぜ私は上記のクエリではうまくいかないと思うのか分かりません。この単純な例は、 'SELECT * FROM(SELECT GETDATE()UNION ALL SELECT 0)x(d)WHERE d = 0')を示しているようです。クエリは '1900-01-01 00:00:00.000'の値を持つ1つの行を返します。 –
私のコメントを明確にするために私の解決策を読む必要があると思う –