カテゴリー別アーカイブ: sqlite

[sqlite]日付と時間についての関数

sqliteは以下にある5つの日付と時間を扱う関数がある。

date(timestring, modifier, modifier, …)
time(timestring, modifier, modifier, …)
datetime(timestring, modifier, modifier, …)
julianday(timestring, modifier, modifier, …)
strftime(format, timestring, modifier, modifier, …)

これら全てはゼロ及び修飾文字列で構成されるtime string型を引数としている。strftime関数は第一引数としてtime string型を指定している。
日付と時間の関数はISO-8601に準拠している。date()はYYYY-MM-DD、time()はHH:MM:SS、datetimeはYYYY-MM-DD HH:MM:SSを返す。julianday()はユリウス日を返す。strftime()は第一引数で日付や時刻の形式を受け、標準Cライブラリ及び%fと%Iを加えた変換を行う。

%d day of month: 00
%f fractional seconds: SS.SSS
%H hour: 00-24
%j day of year: 001-366
%J Julian day number
%m month: 01-12
%M minute: 00-59
%s seconds since 1970-01-01
%S seconds: 00-59
%w day of week 0-6 with Sunday==0
%W week of year: 00-53
%Y year: 0000-9999
%% %

注釈:全ての日付や時刻の関数はstrftime関数によって表現できる。
Function Equivalent strftime()
date(…) strftime(‘%Y-%m-%d’, …)
time(…) strftime(‘%H:%M:%S’, …)
datetime(…) strftime(‘%Y-%m-%d %H:%M:%S’, …)
julianday(…) strftime(‘%J’, …)

時間文字列は以下のどの形式でもよい。
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
注釈:DDDDDDDDDDはunix時間を表す整数
修飾文字列は以下の種類がある。
NNN days
NNN hours
NNN minutes
NNN.NNNN seconds
NNN months
NNN years
start of month
start of year
start of day
weekday N
unixepoch
localtime
utc

最初6つの修飾文字列は単に時間や日付を進めたりするためにある。
weekday修飾文字列はNで指定した曜日(日曜日は0、月曜日は1、…)
unixepochは1970年からの秒数である。

【例】
現在の日付
SELECT date(‘now’);

現在の月の最初に日
SELECT date(‘now’,’start of month’,’+1 month’,’-1 day’);

unix時間の1092941466をdatetimeに変換する
SELECT datetime(1092941466, ‘unixepoch’);

現在時刻からunix時間を計算
SELECT strftime(‘%s’,’now’);

US独立記念日から現在までの日数を計算
SELECT julianday(‘now’) – julianday(‘1776-07-04’);

2004年のある瞬間から現在までの秒数を計算
SELECT strftime(‘%s’,’now’) – strftime(‘%s’,’2004-01-01 02:34:56′);

今年10月の最初の火曜日の日付を計算
SELECT date(‘now’,’start of year’,’+9 months’,’weekday 2′);