Date のテーブルと、ID、FromDate、および ToDate の列を以下に示します。
ID FromDate ToDate
-- -------------- --------------
1 2013-06-10 00:00:00 2013-06-30 00:00:00
2 2013-05-10 00:00:00 2013-06-10 00:00:00
3 2012-08-01 00:00:00 2012-12-31 00:00:00
4 2013-07-10 00:00:00 2013-07-30 00:00:00
以下に示す[getdate]を使用して、チェッククエリを実行し、アクティブ、非アクティブ、または期限切れのいずれであるかを結果として列を作成します
Select ID, FromDate, ToDate,
(case when convert(varchar(8),FromDate,112) <= convert(varchar(8),getdate(),112)
and convert(varchar(8),ToDate,112) <= convert(varchar(8),getdate(),112) then 'Expired'
when convert(varchar(8),FromDate,112) <= convert(varchar(8),getdate(),112)
and convert(varchar(8),ToDate,112) >= convert(varchar(8),getdate(),112) then 'Active'
when convert(varchar(8),FromDate,112) >= convert(varchar(8),getdate(),112)
and convert(varchar(8),ToDate,112) >= convert(varchar(8),getdate(),112) then 'Inactive' end )'Result'
from Date
正しい結果が表示されます
ID FromDate ToDate Result
-- -------------- -------------- --------
1 2013-06-10 00:00:00 2013-06-30 00:00:00 Active
2 2013-05-10 00:00:00 2013-06-10 00:00:00 Expired
3 2012-08-01 00:00:00 2012-12-31 00:00:00 Expired
4 2013-07-10 00:00:00 2013-07-30 00:00:00 Inactive
しかし、Case クエリが長すぎます。コードを短くしたり、パフォーマンスを向上させる方法はありますか?