読者です 読者をやめる 読者になる 読者になる

前年度との比較(SQL Server 2005版)

SQL

こっちとほとんど一緒だけど、日付関数とかに違いがある。


MySQL版だと、

-- 同じ月は対象外
(month(now()) <> month(E.doc_date)) AND (
  -- 前年度の対象範囲は・・・
  E.doc_date BETWEEN
    -- 前年度の4月1日から
    concat(year(now()) - CASE WHEN month(now()) IN (1, 2, 3) THEN 2 ELSE 1 END, '-4-1') AND
    -- 前年度の今日まで
    date_sub(now(), interval CASE WHEN month(now()) IN (1, 2, 3) THEN 2 ELSE 1 END year) OR
  -- 今年度の範囲も前年度と同様
  E.doc_date BETWEEN
    concat(year(now()) - CASE WHEN month(now()) IN (1, 2, 3) THEN 1 ELSE 0 END, '-4-1') AND
    date_sub(now(), interval CASE WHEN month(now()) IN (1, 2, 3) THEN 1 ELSE 0 END year)
)

こうだったけど、SQL Server 2005では

-- 同じ月は対象外
(month(getdate()) <> month(E.doc_date)) AND (
  -- 前年度の対象範囲は・・・
  E.doc_date BETWEEN
    -- 前年度の4月1日から
    cast(
        cast(
            year(getdate()) - CASE WHEN month(getdate()) IN (1, 2, 3) THEN 2 ELSE 1 END
            AS char(4)
        ) + '-4-1'
        AS datetime
    ) AND
    -- 前年度の今日まで
    dateadd(year, CASE WHEN month(getdate()) IN (1, 2, 3) THEN -2 ELSE -1 END, getdate()) OR
  -- 今年度の範囲も前年度と同様
  E.doc_date BETWEEN
    cast(
        cast(
            year(getdate()) - CASE WHEN month(getdate()) IN (1, 2, 3) THEN 1 ELSE 0 END
            AS char(4)
        ) + '-4-1'
        AS datetime
    ) AND
    dateadd(year, CASE WHEN month(getdate()) IN (1, 2, 3) THEN -1 ELSE 0 END, getdate())
)

こんな感じ?
例によって試してない。