SQLite で連続する日付をつくりたい。
とある事情で、与える日付のフォーマットは、「YYYY/MM/DD」にしたい
やってることは?
julianday 関数は、日時を与えると、ユリウス日を返す。ユリウス日は、西暦紀元前4713年1月1日正午(グリニッジ時)から数えた通日。単位は日。
julianday 関数の引数は、「YYYY-MM-DD」で与えるので、replace で区切りを置き換えている。
('2020/02/25' を、'2020-02-25' に置換)
その後、strftime関数で 日付を作り直す。
日付の連番は これで、OK!
WITH RECURSIVE cnt(x) AS (VALUES(julianday(replace('2020/02/25', '/', '-') )) UNION ALL SELECT x+1 FROM cnt WHERE x < julianday(replace('2020/03/03', '/', '-') )) SELECT x,strftime('%Y/%m/%d', x) AS DATE FROM cnt;
結果
2458904.5|2020/02/25 2458905.5|2020/02/26 2458906.5|2020/02/27 2458907.5|2020/02/28 2458908.5|2020/02/29 2458909.5|2020/03/01 2458910.5|2020/03/02 2458911.5|2020/03/03
実際は、左のx のカラムは要らないね。
× の 0.5 は何やねん。と思うけども、julianday関数は 正午が基準 なので、夜の0時は 0.5になる。
おまけ。数字の連番を作るには、
3 ~ 10を出力。
WITH RECURSIVE cnt(x) AS (VALUES(3) UNION ALL SELECT x+1 FROM cnt WHERE x < 10) SELECT x FROM cnt;
結果
3 4 5 6 7 8 9 10
1から、2 つづつ増加させ、 10 個出力 (奇数で1~19)
WITH RECURSIVE cnt(x) AS ( SELECT 1 UNION ALL SELECT x+2 FROM cnt LIMIT 10 ) SELECT x FROM cnt;
結果
1 3 5 7 9 11 13 15 17 19