日期和时间函数和运算符

日期和时间运算符

运算符

示例

结果

+

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 格式的 string 解析为 timestamp with time zone

from_iso8601_date(string) -> date()

将 ISO 8601 格式的 string 解析为 date

from_unixtime(unixtime) -> timestamp()

将 UNIX 时间戳 unixtime 作为时间戳返回。

from_unixtime(unixtime, string) -> timestamp with time zone()

使用 string 作为时区,将 UNIX 时间戳 unixtime 作为带有时区的时间戳返回。

from_unixtime(unixtime, hours, minutes) -> timestamp with time zone()

使用 hoursminutes 作为时区偏移量,将 UNIX 时间戳 unixtime 作为带有时区的时间戳返回。

localtime -> time()

返回查询开始时的当前时间。

localtimestamp -> timestamp()

返回查询开始时的当前时间戳。

now() -> timestamp with time zone()

这是 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

截断函数

The date_trunc 函数支持以下单位

单位

示例截断值

second

2001-08-22 03:04:05.000

minute

2001-08-22 03:04:00.000

hour

2001-08-22 03:00:00.000

day

2001-08-22 00:00:00.000

week

2001-08-20 00:00:00.000

month

2001-08-01 00:00:00.000

quarter

2001-07-01 00:00:00.000

year

2001-01-01 00:00:00.000

以上示例使用时间戳 2001-08-22 03:04:05.321 作为输入。

date_trunc(unit, x) -> [same as input]()

返回 x 截断到 unit

间隔函数

本节中的函数支持以下间隔单位

单位

描述

millisecond

毫秒

second

minute

分钟

hour

小时

day

week

month

quarter

年的一季度

year

date_add(unit, value, timestamp) -> [same as input]()

将类型为 unit 的间隔 value 添加到 timestamp。减法可以通过使用负值来执行。

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

返回 timestamp2 - timestamp1,以 unit 表示。

持续时间函数

The parse_duration 函数支持以下单位

单位

描述

ns

纳秒

us

微秒

ms

毫秒

s

m

分钟

h

小时

d

parse_duration(string) -> interval()

将格式为 value unitstring 解析为间隔,其中 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_parsestr_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

AMPM

%r

时间,12 小时制 (hh:mm:ss 后面是 AMPM)

%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

以星期日为周的第一天,该周的年份,数字,四位数;与 %V 一起使用

%x

周中年份,周一为一周的第一天,数字,四位数;与 %v 配合使用

%Y

年份,数字,四位数

%y

年份,数字(两位数) [2]

%%

一个字面 % 字符

%x

x,对于任何未在上面列出的 x

警告

以下说明符目前尚不支持:%D %U %u %V %w %X

date_format(timestamp, format) -> varchar()

使用 formattimestamp 格式化为字符串。

date_parse(string, format) -> timestamp()

使用 formatstring 解析为时间戳。

Java 日期函数

本节中的函数使用与 JodaTime 的 DateTimeFormat 模式格式兼容的格式字符串。

format_datetime(timestamp, format) -> varchar()

使用 formattimestamp 格式化为字符串。

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

使用 formatstring 解析为带时区的时间戳。

提取函数

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 返回一年中的日期。该值范围从 1366

dow(x) -> bigint()

这是 day_of_week() 的别名。

doy(x) -> bigint()

这是 day_of_year() 的别名。

hour(x) -> bigint()

x 返回一天中的小时数。该值范围从 023

millisecond(x) -> bigint()

x 返回秒中的毫秒数。

minute(x) -> bigint()

x 返回小时中的分钟数。

month(x) -> bigint()

x 返回一年中的月份。

quarter(x) -> bigint()

x 返回一年中的季度。该值范围从 14

second(x) -> bigint()

x 返回分钟中的秒数。

timezone_hour(timestamp) -> bigint()

timestamp 返回时区偏移量的小时数。

timezone_minute(timestamp) -> bigint()

timestamp 返回时区偏移量的分钟数。

week(x) -> bigint()

x 返回一年中的 ISO 周。该值范围从 153

week_of_year(x) -> bigint()

这是 week() 的别名。

year(x) -> bigint()

x 返回年份。

year_of_week(x) -> bigint()

x 返回 ISO 周 的年份。

yow(x) -> bigint()

这是 year_of_week() 的别名。