概要
time()では以下のフォーマットで日時を取り扱うことができる。 各フォーマットのサンプルを記載しておく。 time()で返される値の日付部分は必ず2000年1月1日として扱われる。
フォーマット
- 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.37.0
YYYY-MM-DD
時間部分を指定しないと 0時0分0秒として取得される。
さらに指定した日付に関係なく必ず2000年1月1日として扱われる。
また、月や日が一桁の場合は必ず0埋めする。
0埋めしないと結果がnullになってしまう。
sqlite> select time('2021-11-30');
00:00:00
sqlite> select datetime(time('2021-11-30'));
2000-01-01 00:00:00
sqlite> .nullvalue [null]
sqlite> select datetime(time('2021-11-1'));
[null]
YYYY-MM-DD HH:MM
YYYY-MM-DDTHH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DDTHH:MM:SS
秒を指定しないと0秒として取得される。
「T」が有っても無くても結果は同じ。
指定した日付に関係なく2000年1月1日として扱われる、
各項目 一桁の時に0埋めにしないと結果がnullになるのは前述と同じ。
sqlite> select time('2021-11-30 01:01');
01:01:00
sqlite> select time('2021-11-30T01:01');
01:01:00
sqlite> select datetime(time('2021-11-30 01:01'));
2000-01-01 01:01:00
sqlite> select time('2021-01-01 01:01:01');
01:01:01
sqlite> select time('2021-01-01T01:01:01');
01:01:01
sqlite> select datetime(time('2021-01-01 01:01:01'));
2000-01-01 01:01:01
sqlite> .nullvalue [null]
sqlite> select time('2021-1-1 1:1:1');
[null]
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM:SS.SSS
ミリ秒は切り捨てられる。
指定した日付に関係なく2000年1月1日として扱われる、
各項目 一桁の時に0埋めにしないと結果がnullになるのは前述と同じ。
sqlite> select time('2021-01-01 01:01:01.001');
01:01:01
sqlite> select time('2021-01-01T01:01:01.001');
01:01:01
sqlite> select datetime(time('2021-01-01T01:01:01.001'));
2000-01-01 01:01:01
sqlite> .nullvalue [null]
sqlite> select time('2021-1-1 1:1:1.1');
[null]
HH:MM
HH:MM:SS
HH:MM:SS.SSS
time()のメインとなる使い方。
ミリ秒は切り捨てられる。
指定した日付に関係なく2000年1月1日として扱われる、
時分秒が一桁の場合、0埋めが必要なのは他のフォーマットと同じ。
sqlite> select time('01:01');
01:01:00
sqlite> select time('01:01:01');
01:01:01
sqlite> select time('01:01:01.001');
01:01:01
sqlite> select datetime(time('01:01:01.001'));
2000-01-01 01:01:01
sqlite> .nullvalue [null]
sqlite> select time('1:1:1.1');
[null]
now
本日日付を返す。大文字でもOK。 datetime等に渡すと2000年1月1日になるのは前述と同じ。
sqlite> select time('now');
13:01:04
sqlite> select time('NOW');
13:01:20
sqlite> select datetime(time('now'));
2000-01-01 13:01:48
DDDDDDDDDD
ユリウス日 を指定する。あまり使う機会は無さそう。
sqlite> select datetime(2459519.58);
2021-11-01 01:55:12
sqlite> select time(2459519.58);
01:55:12
sqlite> select datetime(time(2459519.58));
2000-01-01 01:55:12
参考サイト
-
SQLite 公式サイト(英語)
https://www.sqlite.org/index.html -
Date And Time Functions
公式の日付操作に関するドキュメント
https://www.sqlite.org/lang_datefunc.html -
あさはか備忘録 SQLite3 コマンドラインツールでnullの表示を見やすくする
https://sfnovicenotes.blogspot.com/2020/11/sqlite3-null.html