1
この作品を検索:休日DOYのIN(文字列)(Postgresqlの)
WITH month AS (
SELECT date_part('doy',d.dt) as doy,
dt::date as date
FROM generate_series('2017-01-01','2017-01-15', interval '1 day') as d(dt)
)
SELECT date,
CASE
WHEN doy IN (1,2,3) THEN 0 ELSE 8 END
FROM month
http://sqlfiddle.com/#!15/aed15/10
しかし、私は、文字列
CREATE TABLE holidays
(id int4,days character(60));
INSERT INTO holidays
(id,days)
VALUES
('2017','1,2,3');
として1,2,3を保存する場合.. 1,2,3を次の文字列に置き換えます。
WITH month AS (
SELECT date_part('doy',d.dt) as doy,
dt::date as date
FROM generate_series('2017-01-01','2017-01-15', interval '1 day') as d(dt)
)
SELECT date, days,
CASE
WHEN doy::text IN (days) THEN 0 ELSE 8 END
FROM month
LEFT JOIN holidays ON id=2017
http://sqlfiddle.com/#!15/aed15/13
「日」は正しくキャストされていないようです。しかし、私はどのように把握することはできません。ここ
TIA、
を感じているように私は、ソリューション全体を再考う休日を別々に保管すること。あなたの提案は何ですか? – sibert
私はおそらく具体的な日付の休日のテーブルを持っています。 hilidaysの百年は、まだ例外的な小さなテーブルになるでしょう –
doy = ANY(string_to_array(days、 '、'):: integer [])THEN 0 ELSE 8も動作するようです。その他の提案はありますか? – sibert