BigQueryは以下のDATETIME
関数をサポートしています。
すべての出力はISO 8601に従って、日付と時刻をT
で分離して自動的にフォーマットされます。
CURRENT_DATETIME
CURRENT_DATETIME()
説明
現在の時刻を DATETIME
オブジェクトとして返します。3562>
Return Data Type
DATETIME
例
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Description
- 年、月、日、時、分、秒を表す INT64 値を用いて
DATETIME
オブジェクトを構築する。 - DATEオブジェクトとオプションのTIMEオブジェクトを使用して
DATETIME
オブジェクトを構築します。 - TIMESTAMPオブジェクトを使用して
DATETIME
オブジェクトを構築します。 タイムゾーンを指定するオプションのパラメータをサポートしています。
データ型を返す
例
EXTRACT
EXTRACT(part FROM datetime_expression)
説明
与えられたdatetime_expression
から指定されたpart
に対応する値を返します。
許容される part
の値は次のとおりです:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
WEEK
: 指定された範囲の日付の週番号を返します。 週は日曜日から始まり、その年の最初の日曜日より前の日付は第0週です。 -
WEEK(<WEEKDAY>)
: 範囲内の日付のdatetime_expression
の週番号を返します。 週はWEEKDAY
から始まり、その年の最初のWEEKDAY
より前のdatetime
日は第 0 週になります。WEEKDAY
の有効値はSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, そしてSATURDAY
. -
ISOWEEK
である。datetime_expression
のISO 8601週番号を返す。ISOWEEK
は月曜日から始まります。 返される値は、. 各ISO年の最初のISOWEEK
は、グレゴリオ暦年の最初の木曜日の前の月曜日から始まります。 MONTH
QUARTER
YEAR
-
ISOYEAR
: ISO 8601週番号を持つ年を返します。これは、date_expression
が属する週の木曜日を含むグレゴリオ暦です。 DATE
TIME
返される値は、低次の時間期間を切り詰めた値です。
Return Data Type
INT64
ただし、以下の場合を除く。
- If
part
isDATE
, return aDATE
object. - If
part
isTIME
, return aTIME
object., if isTIME
objects.If I took aDATE
, return aEXTRACT
for aEXTRACT
, ifEXTRACT
, except in these cases.For example when extracting seconds, thetruncates the millisecond and microsecond value.The other than the following cases.
例
次の例では、EXTRACT
はHOUR
time partに対応する値を返す。
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
次の例では、EXTRACT
はdatetimeの列から異なるtime partに対応する値を返している。 EXTRACT
は最初の列を日曜日から始まる週を使って計算し、2番目の列を月曜日から始まる週を使って計算する。
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
説明
DATETIME
オブジェクトにpart
の単位int64_expression
を追加する。
DATETIME_ADD
は part
に対して以下の値をサポートします。
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
に追加。 7DAY
s に相当します。 MONTH
QUARTER
YEAR
Date が月の最終日(またはそれに近い)場合、MONTH、QUARTER および YEAR 部分に特別な処理が必要です。 3562>
戻り値のデータ型
DATETIME
例
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
説明
DATETIME
からpart
単位のint64_expression
減算を行ないます。
DATETIME_SUB
は part
について以下の値をサポートしています。 7 DAY
s に相当します。
MONTH
QUARTER
YEAR
MONTH
, QUARTER
, YEAR
部分について、その日が月の最終日(またはそれに近い)場合は特別な処理が必要です。 もし結果の月の日数が元のDATETIME
の日数より少ない場合、結果の日数は新しい月の最終日となります。
戻り値データ型
DATETIME
例
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
説明
二つのDATETIME
オブジェクト間のpart
間隔(datetime_expression_a
– datetime_expression_b
)の整数指定数を戻す。最初のDATETIME
が二つ目より早い場合、出力結果は負の値となる。 2つのDATETIME
オブジェクトの間のマイクロ秒の差がINT64
値をオーバーフローする場合など、計算が結果の型をオーバーフローする場合はエラーを投げます。
DATETIME_DIFF
は part
に対して次の値をサポートします:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK(<WEEKDAY>)
: この日付部分はWEEKDAY
で始まります。WEEKDAY
の有効な値はSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, そしてSATURDAY
です。 -
ISOWEEK
の場合。 ISO 8601の週番号を使用。 ISOの週は月曜日から始まります。 MONTH
QUARTER
YEAR
-
ISOYEAR
: ISO 8601の週番号を使用します。
: 日付部分が日曜日から始まります。
戻り値データ型
INT64
例
上の例は、24時間離れた2つのDATETIME
に対してDATETIME_DIFF
を実行した結果を示しています。 DATETIME_DIFF
はこの範囲のDATETIME
sのパート境界の数をカウントしているので、パートWEEK
を持つDATETIME_DIFF
は1を返す。 それぞれのWEEK
は日曜日から始まるので、2017-10-14 00:00:00
の土曜日と2017-10-15 00:00:00
の日曜日の間に1つのパートの境界がある。
次の例は、異なる年の2つの日付に対するDATETIME_DIFF
の結果である。 DATETIME_DIFF
の日付部分が YEAR
の場合、2つの DATETIME
の間にあるグレゴリオ暦の境界の数を数えるので、3が返されます。 DATETIME_DIFF
に日付部分ISOYEAR
を指定すると、2番目のDATETIME
がISO年2015に属するので、2が返されます。 2015暦年の最初の木曜日は2015-01-01なので、ISO年2015はその前の月曜日、2014-12-29から始まります。
次の例は、2日連続の場合のDATETIME_DIFF
の結果を示しています。 最初の日付は月曜日で、2番目の日付は日曜日にあたります。 DATETIME_DIFF
に日付部分WEEK
を指定すると、このタイムパートは日曜日から始まる週を使用するため、0が返されます。 DATETIME_DIFF
に日付部分WEEK(MONDAY)
を指定すると、1が返されます。
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Description
DATETIME
オブジェクトをpart
の粒度に切り詰めます。
DATETIME_TRUNC
は part
に対して以下の値をサポートしています:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
ISOWEEK
: ISO 8601 週の境界でdatetime_expression
を切り詰めます。ISOWEEK
は月曜日から始まります。 各ISO年の最初のISOWEEK
は、対応するグレゴリオ暦の最初の木曜日を含んでいます。 MONTH
QUARTER
YEAR
-
ISOYEAR
:datetime_expression
を前の ISO 8601 週番号の年に切り詰めます。
WEEK(<WEEKDAY>)
: 週がWEEKDAY
から始まる場合、datetime_expression
を直前の週境界まで切り詰めます。 WEEKDAY
の有効な値は、SUNDAY
, MONDAY
, TUESDAY
, WEDNESDAY
, THURSDAY
, FRIDAY
, および SATURDAY
です。
データ型を返す
DATETIME
例
次の例では、元の DATETIME
は日曜日に当たります。 part
は WEEK(MONDAY)
なので、DATE_TRUNC
は前の月曜日の DATETIME
を返す。
次の例では、元の datetime_expression
は Gregoriancalendar year 2015 にある。 しかし、ISOYEAR
の日付部分を持つDATETIME_TRUNC
は、datetime_expression
をグレゴリオ暦ではなくISO年の始まりに切り捨てます。 2015年の最初の木曜日は2015-01-01なので、ISO年2015はその前の月曜日、2014-12-29に始まります。したがって、datetime_expression
2015-06-15 00:00:00の前のISO年の境界は2014-12-29です。
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
説明
指定したformat_string
に従ってDATETIME
オブジェクトをフォーマットします。 3562>
返されるデータ型
STRING
例
SELECT FORMAT_DATETIME("%c", DATETIME "2008-12-25 15:30:00") AS formatted;+--------------------------+| formatted |+--------------------------+| Thu Dec 25 15:30:00 2008 |+--------------------------+
SELECT FORMAT_DATETIME("%b-%d-%Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec-25-2008 |+-------------+
SELECT FORMAT_DATETIME("%b %Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec 2008 |+-------------+
LAST_DAY
LAST_DAY(datetime_expression)
説明
datetime expressionから日付を含む最終日を返します。これは、一般的に月の最終日を返すために使用されます。
オプションで、最終日を返す日付部分を指定できます。このパラメータを使用しない場合、デフォルト値は MONTH
です。LAST_DAY
は date_part
に対して次の値をサポートしています。
YEAR
QUARTER
MONTH
-
WEEK
.Date:Date:Date.Day(Date-Time:日).Date:Date(Date-time:日).Date:Date(Date-time)。 7DAY
s. -
WEEK(<WEEKDAY>)
に相当する。<WEEKDAY>
は週の開始日を表します。有効な値はSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, およびSATURDAY
です。 ISO 8601の週区分を使用します。 ISOの週は月曜日から始まる。 -
ISOYEAR
. ISO年の境界は、木曜日が対応するグレゴリオ暦の年に属する最初の週の月曜日です。
返すデータ型
DATE
例
これらは両方とも月の最終日を返します:
SELECT LAST_DAY(DATETIME '2008-11-25', MONTH) AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
SELECT LAST_DAY(DATETIME '2008-11-25') AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
これは年の最終日を返します:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
これは日曜日で始まる週の最後の曜日を返します。
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
月曜日から始まる週の最終日を返します:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(MONDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-16 |+------------+
PARSE_DATETIME
PARSE_DATETIME(format_string, datetime_string)
Description
文字列表現の時日をDATETIME
オブジェクトに変換します。
format_string
は、datetime_string
がどのようにフォーマットされるかを定義する format 要素を含んでいます。 datetime_string
の各要素は、format_string
に対応する要素を持たなければなりません。 format_string
の各要素の位置は、datetime_string
の各要素の位置と一致しなければなりません。
フォーマット文字列は、%Q
, %a
, %A
, %g
, %G
, %j
, %P
, %u
, %U
, %V
, %w
そして %W
を除くほとんどの format element に完全に対応しています。
PARSE_DATETIME
は以下の規則に従って string
を解析します:
- Unspecified fields(未指定フィールド)。 指定されていないフィールドはすべて
1970-01-01 00:00:00.0
から初期化される。 例えば、年が指定されていない場合、それは1970
に初期化されます。 - 大文字小文字を区別しない名前。
Monday
やFebruary
のような名前は、大文字と小文字を区別しません。 - 空白文字。 フォーマット文字列中の1つ以上の連続した空白は,
DATETIME
文字列中の0つ以上の連続した空白と一致します。 - フォーマット文字列にない場合でも、
DATETIME
文字列の先頭および末尾の空白は常に許容されます。 2つ以上の format 要素が重複する情報を持つとき、いくつかの例外を除いて、一般に最後のものがそれ以前のものを上書きします。 例えば、%F
と%Y
の両方が年に影響するので、最初の要素が後の要素より優先されます。
Return Data Type
DATETIME
例
次の例は、STRING
リテラルをDATETIME
とパースします。
SELECT PARSE_DATETIME('%Y-%m-%d %H:%M:%S', '1998-10-18 13:45:55') AS datetime;+---------------------+| datetime |+---------------------+| 1998-10-18T13:45:55 |+---------------------+
SELECT PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', '8/30/2018 2:23:38 PM') AS datetime+---------------------+| datetime |+---------------------+| 2018-08-30T14:23:38 |+---------------------+
次の例は、自然言語形式の日付を含む STRING
リテラルを DATETIME
として解析します。
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
DATETIME
でサポートされるフォーマット要素
特に断りのない限り、フォーマット文字列を使用する DATETIME
関数は次の要素をサポートしています:
DATETIME
のフォーマット要素