SQL エディタでクエリを入力するとき または計算を作成するとき 、Presto SQL 構文 を使用します。日付やタイムスタンプ値の調整や計算を行うには、以下の一般的な関数が便利です。
メモ:日付と時間の変換/トランスフォーメーションに使われるようなチェーンのランタイム変数は、Presto SQL ではなく Python strftime を使います。
時間帯
タイムスタンプのタイムゾーン を変換するには、AT TIME ZONE 演算子を使用する。例:
SELECT cast(timestamp '2020-10-31 01:00 UTC' as VARCHAR) 2020-10-31 01:00:00.000 UTC SELECT cast(timestamp '2020-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles' as VARCHAR) 2020-10-30 18:00:00.000 America/Los_Angeles
ヒント: ほとんどの地域では、太平洋時間帯にはAmerica/Los_Angeles を、山岳時間帯にはAmerica/Denver を、中部時間帯にはAmerica/Chicago を、東部時間帯にはAmerica/New_York を使用できます。
CURRENT_DATE
クエリ実行時の日付を返却するには、CURRENT_DATE 関数を使用します。例えば、SELECT CURRENT_DATE() 。
日付
値を日付値に変換するには、DATE 関数を DATE(value) として使用する。
DATE_ADD
日付やタイムスタンプに区間単位の値を追加するには、DATE_ADD 関数を DATE_ADD(unit,value,timestamp) として使用します。ユニット用DATE_ADDは、以下をサポートしています:
ミリ秒秒分時日週月四半期年
例えば、SELECT DATE_ADD('day', 10, "2020-06-15") は、2020-06-25 を返却する。
注: IS08601値の書式設定文字列を日付値として解析するには、FROM_ISO8601_DATE関数を使用します。例えば、FROM_ISO8601_DATE('2020-06-15')です。
DATE_DIFF
2つの日付またはタイムスタンプ値の差を返却するには、DATE_DIFF 関数を DATE_DIFF(ユニット,タイムスタンプ1,タイムスタンプ2) として使用します。ユニットについて 、DATE_DIFF は、DATE_ADD と同じ値をサポートしている。例えば、SELECT DATE_DIFF('day', "2020-06-15", "2020-06-25")は10を返します。
DATE_DIFFはDateオブジェクトにのみ適用されるので、この関数を動作させるために他のオブジェクトをキャストする必要があるかもしれないことにご留意ください。
注: IS08601値の書式設定文字列を日付値として解析するには、FROM_ISO8601_DATE関数を使用します。例えば、FROM_ISO8601_DATE('2020-06-15')です。
日付形式
設定された書式で日付またはタイムスタンプ値を返却するには、DATE_FORMAT 関数を DATE_FORMAT(タイムスタンプ,書式設定) として使用します。書式設定、DATE_FORMATでは、これらの値の結合をサポートしています:
| 書式 | 説明 |
|---|---|
%a |
Sun からSat までの曜日略称。 |
%b |
Jan からDec までの略称。 |
%c |
1 から12 までの数値。 |
%D
|
Numeric day of the month with its suffix, such as 1st,
2nd, 3rd...
|
%d |
01から31までの2桁の数字による月日。 |
%e |
1 から31 までの数値。 |
%f |
ミリ秒、000000から999000 印刷用;0から9999999 解析用 |
%H |
24時間時計の時間を2桁の数字で表し、00 から23まで。 |
hまたは%I |
00 から12 まで、2 桁の数字として 12 時間時計の時間を示す。 |
%i |
分、00 から59 まで |
%j |
000から366までの3桁の数字による年内の日付。 |
%k |
24 時間時計の時、0 から23 まで |
%l |
0 から12 まで、12 時間時計の時間。 |
%M |
月名称、1月 から12月まで |
%m |
01 から12 までの2桁の数値。 |
%p |
12時間表示のAMまたはPM
|
%r |
hh:mm:ssの後にAMまたはPMが続く12時間制の表示 |
%s または%S |
秒、00 から59 まで。 |
%T |
24時間制の時刻(hh:mm:ss) |
%U
|
Week of the year, from 00 to 53,
where Sunday is the first day of the week
|
%u
|
Week of the year, from 00 to 53,
where Monday is the first day of the week
|
%V
|
Week of the year, from 01 to 53,
where Sunday is the first day of the week; used with %X
|
%v |
01 から53 まで。月曜日が週の初日。%x とともに使用。 |
%W |
曜日名称日曜日 から土曜日まで |
%w
|
Day of the week, from 0 to 6,
where Sunday is the first day of the week
|
%X
|
Year for when Sunday is the first day of the week; used with %V
|
%x |
月曜日が週の初めの日である場合の年。%v と共に使用。 |
%Y |
年(4桁の数字) |
%y |
2桁の数字としての年 注: 解析時、 |
%% |
リテラル% 文字 |
メモ: 1 から7 までの曜日を数字で返却するには、DAY_OF_WEEK 関数を使用する。
DAY
日付やタイムスタンプから、1 から 31 までの数字でその月の日を返却するには、DAY 関数を DAY(date_value) として使用します。例えば、SELECT DAY("2020-06-15") は15 を返す。
曜日
日付またはタイムスタンプから曜日を1 (月曜日)から7 (日曜日)までの数字で返却するには、DAY_OF_WEEK 関数を DAY_OF_WEEK(date_value) として使用します。
EOMONTH
日付やタイムスタンプから月の最終日の数字を返却するには、EOMONTH(date_value, month_number_value) のように、EOMONTH 関数を使用します。
FROM_ISO8601_DATE
ISO8601書式設定文字列を日付としてパースするには、FROM_ISO8601_DATE 関数を使用します(FROM_ISO8601_DATE(date_value))。
インターバル
日付またはタイムスタンプのインターバル単位値を追加または減算するには、INTERVAL 関数を、+ または- 演算子(+/- INTERVAL値 単位 など)とともに使用します。単位 、INTERVAL は、DATE_ADDと同じ値をサポートしています。例:
-
DATE '2020-08-08' + INTERVAL '2' dayは、2020-08-10を返します。 -
TIMESTAMP '2020-08-08 01:00' + INTERVAL '29' hourは、2020-08-09 06:00:00.000を返します。 -
INTERVAL '2' day + INTERVAL '3' hourは、2 03:00:00.000を返します。 -
TIMESTAMP '2020-10-31 01:00' - INTERVAL '1' monthは、2020-09-30 01:00:00.000を返します。
MONTH
日付やタイムスタンプから月を1から12までの数値で返却するには、MONTH 関数をMONTH(date_value)として使用します。 例えば、SELECT MONTH("2020-06-15") は、6 を返却する。
最新情報|NOW
クエリ実行時のタイムスタンプを返却するには、NOW 関数を使用します。例えば、SELECT NOW() 。
四半期
日付またはタイムスタンプから、その年の四半期を1から4までの数値で返却するには、QUARTER 関数を QUARTER(date_value) として使用します。 例えば、SELECT QUARTER("2020-06-15") は、2 を返却する。
YEAR
日付やタイムスタンプから1000から9990までの数字で年を返却するには、YEAR 関数をYEAR(date_value)として使用します。 例えば、SELECT YEAR("2020-06-15") は、2020 を返す。