2021年11月13日土曜日

SQLite3 date()のサンプル

概要

date()では以下のフォーマットで日付を取り扱うことができる。 各フォーマットのサンプルを記載しておく。

フォーマット
  • YYYY-MM-DD
  • YYYY-MM-DD HH:MM
  • YYYY-MM-DD HH:MM:SS
  • YYYY-MM-DD HH:MM:SS.SSS
  • YYYY-MM-DDTHH:MM
  • YYYY-MM-DDTHH:MM:SS
  • YYYY-MM-DDTHH:MM:SS.SSS
  • HH:MM
  • HH:MM:SS
  • HH:MM:SS.SSS
  • now
  • DDDDDDDDDD

Y:年、M:月、D:日、H:時、M:分、S:秒、 T:年月日と時分秒を区切る文字。

実行例

環境
  • Windows 10 64bit
  • SQLite3 ver.3.36.0
YYYY-MM-DD

月や日が一桁の場合、必ず0埋めする。
0埋めしないと結果がnullになってしまう。


sqlite> .nullvalue [null]
sqlite> select date('2021-01-01');
2021-01-01

sqlite> select date('2021-1-1');
[null]

                        
YYYY-MM-DD HH:MM
YYYY-MM-DDTHH:MM

時間部分は切り捨てられる。「T」が有っても無くても結果は同じ。
各項目 一桁の時に0埋めにしないと結果がnullになるのは前述と同じ。


sqlite> .nullvalue [null]
sqlite> select date('2021-01-01 01:01');
2021-01-01

sqlite> select date('2021-01-01T01:01');
2021-01-01

sqlite> select datetime(date('2021-01-01 01:01'));
2021-01-01 00:00:00

sqlite> select date('2021-1-1 1:1');
[null]

sqlite> select date('2021-01-01 1:1');
[null]
                        
YYYY-MM-DD HH:MM:SS
YYYY-MM-DDTHH:MM:SS

基本的には「YYYY-MM-DD HH:MM」と同じ。


sqlite> .nullvalue [null]
sqlite> select date('2021-01-01 01:01:01');
2021-01-01

sqlite> select date('2021-01-01T01:01:01');
2021-01-01

sqlite> select datetime(date('2021-01-01 01:01:01'));
2021-01-01 00:00:00

sqlite> select date('2021-01-01 01:01:1');
[null]
                        
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM:SS.SSS

時間部分は切り捨てられる。
年月日時分秒は1桁の場合0埋めが必要だが、 小数点以下のミリ秒部分は無視されるため、 桁数・0埋めを意識しなくていい。


sqlite> .nullvalue [null]
sqlite> select date('2021-01-01 01:01:01.001');
2021-01-01

sqlite> select date('2021-01-01T01:01:01.001');
2021-01-01

sqlite> select date('2021-1-1 1:1:1.1');
[null]

sqlite> select date('2021-01-01 01:01:01.1');
2021-01-01

sqlite> select date('2021-01-01 01:01:01.1000000');
2021-01-01

sqlite> select datetime(date('2021-01-01 01:01:01.1000000'));
2021-01-01 00:00:00
                        
HH:MM
HH:MM:SS
HH:MM:SS.SSS

date()に時間だけを指定すると必ず2000年1月1日を返す。
時分秒が一桁の場合、0埋めが必要なのは他のフォーマットと同じ。


sqlite> .nullvalue [null]
sqlite> select date('01:01');
2000-01-01

sqlite> select date('01:01:01');
2000-01-01

sqlite> select date('01:01:01.001');
2000-01-01

sqlite> select date('1:1:1.1');
[null]
                        
now

本日日付を返す。大文字でもOK。


sqlite> select date('now');
2021-11-13
sqlite> select date('NOW');
2021-11-13
                        
DDDDDDDDDD

ユリウス日 を指定する。あまり使う機会は無さそう。


sqlite> select date(2459519.58);
2021-11-01
                        

参考サイト