毎年7月1日から10月31日までの日付範囲を取得する必要があります。それに基づいて、別の列を更新する必要があります。
日付フィールドは日時です。以下のようになります。
Select Cash = Case When date between '1st July' and '31st October' Then (Cash * 2) End
From MytTable
注: この範囲は毎年有効です。
毎年7月1日から10月31日までの日付範囲を取得する必要があります。それに基づいて、別の列を更新する必要があります。
日付フィールドは日時です。以下のようになります。
Select Cash = Case When date between '1st July' and '31st October' Then (Cash * 2) End
From MytTable
注: この範囲は毎年有効です。
このソリューションは、月と日ごとに定期的にスケジュールされているいくつかのテーマを取得するのに役立ちました. たとえば、11 月 1 日から 3 月 1 日までにスケジュールされた項目など、複数の年にまたがる処理を行います。
私のデータは次のように保存されます:
ThemeName, StartMonth, StartDay, EndMonth, EndDay
Christmas, 12,1,12,26
Winter, 11, 1, 3, 1
Spring, 3,1,5,1
Sports, 0,0,0,0 //continuous
クエリは次のとおりです。
SELECT
DISTINCT ThemeName
FROM (
SELECT
CASE WHEN EndDate < StartDate AND ((Current Between StartDate AND 1231) OR (Current Between 0101 AND EndDate) ) THEN -- span multiple year between dates
ThemeName
WHEN StartDate < EndDate AND Current Between StartDate AND EndDate THEN -- normal between dates
ThemeName
WHEN StartDate = 0 AND EndDate = 0 THEN -- continuous
ThemeName
ELSE
'NG'
END as ThemeName
FROM (
SELECT
ThemeName, StartDate, EndDate, Current
FROM (
SELECT
ThemeName,
CAST(Concat(LPAD(CONVERT(StartMonth , CHAR(2)),2,'0'), LPAD(CONVERT(StartDay , CHAR(2)),2,'0') ) as DECIMAL) as StartDate,
CAST(Concat(LPAD(CONVERT(EndMonth , CHAR(2)),2,'0'), LPAD(CONVERT(EndDay , CHAR(2)),2,'0') ) as DECIMAL) as EndDate,
CAST(Concat(LPAD(CONVERT(MONTH(CURRENT_DATE) , CHAR(2)),2,'0'), LPAD(CONVERT(DAY(CURRENT_DATE) , CHAR(2)),2,'0') ) as DECIMAL) as current
FROM
companythemeschedules
WHERE
companyid = 221
) a
) b
) c
WHERE
ThemeName != 'NG'