日付と時刻の関数と演算子

日付と時刻の演算子

演算子

結果

+

date '2012-08-08' + interval '2' day

2012-08-10

+

time '01:00' + interval '3' hour

04:00:00.000

+

timestamp '2012-08-08 01:00' + interval '29' hour

2012-08-09 06:00:00.000

+

timestamp '2012-10-31 01:00' + interval '1' month

2012-11-30 01:00:00.000

+

interval '2' day + interval '3' hour

2 03:00:00.000

+

interval '3' year + interval '5' month

3-5

-

date '2012-08-08' - interval '2' day

2012-08-06

-

time '01:00' - interval '3' hour

22:00:00.000

-

timestamp '2012-08-08 01:00' - interval '29' hour

2012-08-06 20:00:00.000

-

timestamp '2012-10-31 01:00' - interval '1' month

2012-09-30 01:00:00.000

-

interval '2' day - interval '3' hour

1 21:00:00.000

-

interval '3' year - interval '5' month

2-7

タイムゾーン変換

AT TIME ZONE 演算子はタイムスタンプのタイムゾーンを設定します

SELECT timestamp '2012-10-31 01:00 UTC';
2012-10-31 01:00:00.000 UTC

SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles';
2012-10-30 18:00:00.000 America/Los_Angeles

日付と時刻の関数

current_date -> date()

クエリの開始時点での現在の日付を返します。

current_time -> time with time zone()

クエリの開始時点での現在の時刻を返します。

current_timestamp -> timestamp with time zone()

クエリの開始時点での現在のタイムスタンプを返します。

current_timezone() -> varchar()

IANAによって定義された形式(例:America/Los_Angeles)またはUTCからの固定オフセット(例:+08:35)として現在のタイムゾーンを返します

date(x) -> date()

これはCAST(x AS date)のエイリアスです。

last_day_of_month(x) -> date()

月の最終日を返します。

from_iso8601_timestamp(string) -> timestamp with time zone()

ISO 8601 形式の文字列を解析し、タイムゾーン付きのタイムスタンプに変換します。

from_iso8601_date(string) -> date()

ISO 8601 形式の文字列を解析し、日付に変換します。

from_unixtime(unixtime) -> timestamp()

UNIX タイムスタンプ unixtime をタイムスタンプとして返します。

from_unixtime(unixtime, string) -> タイムゾーン付きのタイムスタンプ()

UNIX タイムスタンプ unixtime を、タイムゾーンに 文字列 を使用して、タイムゾーン付きタイムスタンプとして返します。

from_unixtime(unixtime, hours, minutes) -> タイムゾーン付きのタイムスタンプ()

UNIX タイムスタンプ unixtime を、タイムゾーンオフセットに hoursminutes を使用して、タイムゾーン付きタイムスタンプとして返します。

localtime -> time()

クエリの開始時点での現在の時刻を返します。

localtimestamp -> timestamp()

クエリの開始時点での現在のタイムスタンプを返します。

now() -> タイムゾーン付きのタイムスタンプ()

これは current_timestamp のエイリアスです。

to_iso8601(x) -> varchar()

x を ISO 8601 文字列としてフォーマットします。x は日付、タイムスタンプ、またはタイムゾーン付きのタイムスタンプにできます。

to_milliseconds(interval) -> bigint()

日~秒のinterval をミリ秒単位で返します。

to_unixtime(timestamp) -> double()

timestamp を UNIX タイムスタンプとして返します。

注意

以下の SQL 標準関数は括弧を使用しません

  • current_date

  • current_time

  • current_timestamp

  • localtime

  • localtimestamp

切り捨て関数

date_trunc 関数は以下の単位をサポートします

単位

切り捨てられた値の例

2001-08-22 03:04:05.000

2001-08-22 03:04:00.000

2001-08-22 03:00:00.000

2001-08-22 00:00:00.000

2001-08-20 00:00:00.000

2001-08-01 00:00:00.000

四半期

2001-07-01 00:00:00.000

2001-01-01 00:00:00.000

上記の例では、入力としてタイムスタンプ 2001-08-22 03:04:05.321 を使用しています。

date_trunc(unit, x) -> [入力と同じ]()

xunit に切り捨てて返します。

間隔関数

このセクションの関数は、以下の間隔単位をサポートします

単位

説明

ミリ秒

ミリ秒

時間

四半期

四半期

date_add(unit, value, timestamp) -> [入力と同じ]()

unit 型の間隔 valuetimestamp に加算します。減算は負の値を使用することで実行できます。

date_diff(unit, timestamp1, timestamp2) -> bigint()

timestamp2 - timestamp1unit で表現した値を返します。

期間関数

parse_duration 関数は以下の単位をサポートします

単位

説明

ns

ナノ秒

us

マイクロ秒

ms

ミリ秒

s

m

h

時間

d

parse_duration(string) -> interval()

value unit 形式の 文字列 を解析して間隔に変換します。ここで valueunit 値の小数です。

SELECT parse_duration('42.8ms'); -- 0 00:00:00.043
SELECT parse_duration('3.81 d'); -- 3 19:26:24.000
SELECT parse_duration('5m');     -- 0 00:05:00.000

MySQL 日付関数

このセクションの関数は、MySQL の date_parse および str_to_date 関数と互換性のある書式文字列を使用します。MySQL マニュアルに基づく次の表では、書式指定子について説明します。

指定子

説明

%a

曜日の省略名 ( Sun .. Sat )

%b

月の省略名 ( Jan .. Dec )

%c

月、数値 ( 1 .. 12 ) [4]

%D

英語の接尾辞付きの月の曜日 ( 0th, 1st, 2nd, 3rd, … )

%d

月の曜日、数値 ( 01 .. 31 ) [4]

%e

月の曜日、数値 ( 1 .. 31 ) [4]

%f

秒の小数 (印刷の場合は 6 桁: 000000 .. 999000。解析の場合は 1 ~ 9 桁: 0 .. 999999999 ) [1]

%H

時間 ( 00 .. 23 )

%h

時間 ( 01 .. 12 )

%I

時間 ( 01 .. 12 )

%i

分、数値 ( 00 .. 59 )

%j

年の日 ( 001 .. 366 )

%k

時間 ( 0 .. 23 )

%l

時間 ( 1 .. 12 )

%M

月の名前 ( January .. December )

%m

月、数値 ( 01 .. 12 ) [4]

%p

AM または PM

%r

時刻、12 時間形式 ( hh:mm:ss に続いて AM または PM )

%S

秒 ( 00 .. 59 )

%s

秒 ( 00 .. 59 )

%T

時刻、24 時間形式 ( hh:mm:ss )

%U

週(00 .. 53)、日曜が週の最初の日

%u

週(00 .. 53)、月曜が週の最初の日

%V

週(01 .. 53)、日曜が週の最初の日;%Xと併用

%v

週(01 .. 53)、月曜が週の最初の日;%xと併用

%W

曜日名(Sunday .. Saturday

%w

曜日(0 .. 6)、日曜が週の最初の日 [3]

%X

週の年、日曜が週の最初の日、数値、4桁;%Vと併用

%x

週の年、月曜が週の最初の日、数値、4桁;%vと併用

%Y

年、数値、4桁

%y

年、数値(2桁) [2]

%%

リテラルの%文字

%x

上記のリストにない任意のxに対するx

警告

次の指定子は現在サポートされていません:%D %U %u %V %w %X

date_format(timestamp, format) -> varchar()

timestampformatを使用して文字列としてフォーマットします。

date_parse(string, format) -> timestamp()

stringformatを使用してタイムスタンプに解析します。

Java日付関数

このセクションの関数は、JodaTimeのDateTimeFormatパターン形式と互換性のある書式文字列を使用します。

format_datetime(timestamp, format) -> varchar()

timestampformatを使用して文字列としてフォーマットします。

parse_datetime(string, format) -> timestamp with time zone()

stringformatを使用してタイムゾーン付きのタイムスタンプに解析します。

抽出関数

extract関数は次のフィールドをサポートしています

フィールド

説明

YEAR

year()

QUARTER

quarter()

MONTH

month()

WEEK

week()

DAY

day()

DAY_OF_MONTH

day()

DAY_OF_WEEK

day_of_week()

DOW

day_of_week()

DAY_OF_YEAR

day_of_year()

DOY

day_of_year()

YEAR_OF_WEEK

year_of_week()

YOW

year_of_week()

HOUR

hour()

MINUTE

minute()

SECOND

second()

TIMEZONE_HOUR

timezone_hour()

TIMEZONE_MINUTE

timezone_minute()

extract関数でサポートされている型は、抽出するフィールドによって異なります。ほとんどのフィールドは、すべての日付と時刻の型をサポートしています。

extract(field FROM x) -> bigint()

xからfieldを返します。

注意

このSQL標準関数は、引数を指定するための特別な構文を使用します。

便利な抽出関数

day(x) -> bigint()

xから月の日の値を返します。

day_of_month(x) -> bigint()

これはday()のエイリアスです。

day_of_week(x) -> bigint()

xからISO曜日の値を返します。値は1(月曜日)から7(日曜日)の範囲です。

day_of_year(x) -> bigint()

xから年の日の値を返します。値は1から366の範囲です。

dow(x) -> bigint()

これはday_of_week()のエイリアスです。

doy(x) -> bigint()

これはday_of_year()のエイリアスです。

hour(x) -> bigint()

xから時間の値を返します。値は0から23の範囲です。

millisecond(x) -> bigint()

xから秒のミリ秒の値を返します。

minute(x) -> bigint()

xから分の値を返します。

month(x) -> bigint()

xから年の月の値を返します。

quarter(x) -> bigint()

xから年の四半期の値を返します。値は1から4の範囲です。

second(x) -> bigint()

xから分の秒の値を返します。

timezone_hour(timestamp) -> bigint()

timestampからタイムゾーンオフセットの時間の値を返します。

timezone_minute(timestamp) -> bigint()

timestampからタイムゾーンオフセットの分の値を返します。

week(x) -> bigint()

x から ISO週 を返します。値の範囲は 1 から 53 です。

week_of_year(x) -> bigint()

これは week() のエイリアスです。

year(x) -> bigint()

x から年を返します。

year_of_week(x) -> bigint()

x から ISO週 の年を返します。

yow(x) -> bigint()

これは year_of_week() のエイリアスです。