时间和日期基本函数
day(date | timestamp with time zone)
描述:获取给定日期时间中的日(即月份中的第几天)。与dayofmonth(date)函数相同。
取值范围:1~31
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT day('2025-06-28'); day ----- 28 (1 row) SELECT day('2025-06-28 09:00:00+08'); day ----- 28 (1 row) |
weekday(date | timestamp with time zone)
描述:获取给定日期时间对应的星期值,星期一作为一周的开始日。
取值范围:0~6
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT weekday('2020-11-06'); weekday --------- 4 (1 row) SELECT weekday('2020-11-06 09:00:00+08'); weekday --------- 4 (1 row) |
week(date[, mode])
描述:根据模式(mode)返回指定日期时间所处年份中对应的周数,默认模式为0。
- date,表示要获取周数的日期。
- mode,可选参数,指定不同的模式来计算一周的开始和一年的第一周。默认一周的第一天是星期日,也可以指定一周是从星期一还是星期日开始。mode支持的格式如下表所示。
返回值类型:integer
|
模式 |
一周的第一天 |
周数范围 |
第一周的判断规则 |
|---|---|---|---|
|
0 |
星期日 |
0-53 |
从本年的第一个星期日开始,是第一周。前面的计算为第0周。 |
|
1 |
星期一 |
0-53 |
若1月1日到第一个周一的天数超过3天,则计算为本年的第一周。否则为第0周。 |
|
2 |
星期日 |
1-53 |
从本年的第一个星期日开始,是第一周。前面的计算为上年度的第5x周。 |
|
3 |
星期一 |
1-53 |
若1月1日到第一个周一的天数超过3天,则计算为本年的第一周。否则为上年度的第5x周。 |
|
4 |
星期日 |
0-53 |
若1月1日到第一个周日的天数超过3天,则计算为本年的第一周。否则为第0周。 |
|
5 |
星期一 |
0-53 |
从本年的第一个星期一开始,是第一周。前面的计算为第0周。 |
|
6 |
星期日 |
1-53 |
若1月1日到第一个周日的天数超过3天,则计算为本年的第一周。否则为上年度的第5x周。 |
|
7 |
星期一 |
1-53 |
从本年的第一个星期一开始,是第一周。前面的计算为上年度的第5x周。 |
示例:
获取指定日期的对应周数,默认模式0(周日为一周的第一天)。
1 2 3 4 5 |
SELECT WEEK('2026-01-01'); week ------ 0 -- 由于1月1日不在2026年的第一周,根据模式0的规则,它属于上一年的最后一周,因此返回0。 (1 row) |
获取指定日期的对应周数,默认模式1(ISO 标准周一为一周的第一天)。
1 2 3 4 5 |
SELECT WEEK('2026-01-01', 1); week ------ 1 -- 根据模式1的规则,2026年1月1日属于当年的第一周。 (1 row) |
month(date | timestamp with time zone)
描述:获取给定日期时间的月份部分。
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT month('2025-11-30'); month ------- 11 (1 row) SELECT month('2025-11-30 09:00:00+08'); month ------- 11 (1 row) |
quarter(date | timestamp with time zone)
描述:获取给定日期时间所属的季度。季度范围为1~4。
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT quarter(date '2025-12-13'); quarter --------- 4 (1 row) SELECT quarter('2025-03-20 09:00:00+08'); quarter --------- 1 (1 row) |
year(date | timestamp with time zone)
描述:获取给定日期时间所处的年份。
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT year('2025-11-13'); year ------ 2025 (1 row) SELECT year('2025-11-13 09:00:00+08'); year ------ 2025 (1 row) |
yearweek(date[, mode])
描述:获取给定日期时间在本年中对应的年份和周数,周数范围为1~53。
参数说明:
- date,输入的日期或时间戳。
- mode,可选参数,整数类型,用于确定周数计算的逻辑,标准的mode取值范围为0~7。参考表1。
该函数支持更广泛的整数mode输入。输入的mode值会按照公式 (mode % 8 + 8) % 8 映射到 0~7 的标准模式范围内。例如,输入8等同于0,输入-1等同于7,输入-2 等同于6。支持输入任意32位整数(如2147483647)。
返回值类型:integer
示例:
返回给定日期对应的年份和周数。
1 2 3 4 5 6 7 8 9 10 |
SELECT yearweek('2025-11-13'); yearweek ---------- 202545 (1 row) SELECT yearweek('2025-1-1'); yearweek ---------- 202452 (1 row) |
指定mode值为-2(-2映射为6),表示周从星期日开始,2024年1月1日(星期一)属于第1周的第二天,2024年1月1日属于第1周。
1 2 3 4 5 |
SELECT yearweek('2024-1-1', -2); yearweek ---------- 202401 (1 row) |
指定mode值为-6(-6映射为2),表示周从星期三开始,2024年1月1日(星期一)属于上一年的最后一周(即2023年的第53周)。
1 2 3 4 5 |
SELECT yearweek('2024-1-1', -6); yearweek ---------- 202353 (1 row) |
指定mode值为2147483647(2147483647映射为7),表示本年的第一个星期一开始是第一周,2024年1月1日(星期一)属于第1周的第一天,2024年1月1日属于第1周。
1 2 3 4 5 |
SELECT yearweek('2024-1-1', 2147483647); yearweek ---------- 202401 (1 row) |
dayofweek(date | timestamp with time zone)
描述:获取给定日期时间对应的星期值,星期日作为一周的开始日。
取值范围:1~7
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT dayofweek('2025-11-22'); dayofweek ----------- 7 (1 row) SELECT dayofweek('2025-11-22 09:00:00+08'); dayofweek ----------- 7 (1 row) |
dayofmonth(date | timestamp with time zone)
描述:获取给定日期时间所处月份中的天数。
取值范围:1~31
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT dayofmonth('2025-10-28'); dayofmonth ------------ 28 (1 row) SELECT dayofmonth('2025-10-28 09:00:00+08'); dayofmonth ------------ 28 (1 row) |
dayofyear(date | timestamp with time zone)
描述:获取给定日期时间在本年中是第几天。1月1日为第1天,12月31日为365或366天。
取值范围:1~366
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT dayofyear('2025-10-28'); dayofyear ----------- 301 (1 row) SELECT dayofyear('2025-10-28 09:00:00+08'); dayofyear ----------- 301 (1 row |
weekofyear(date | timestamp with time zone)
描述:获取给定日期时间在本年中是第几周,等价于week(date, 3)。
取值范围:1~53
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT weekofyear('2025-11-30'); weekofyear ------------ 48 (1 row) SELECT weekofyear('2025-11-30 09:00:00+08'); weekofyear ------------ 48 (1 row) |
makedate(year, dayofyear)
描述:根据给定的年份和一年中的第几天生成对应的日期值。
返回值类型:date
示例:
1 2 3 4 5 |
SELECT makedate(2025, 60); makedate ------------ 2025-03-01 (1 row) |
maketime(hour, minute, second)
描述:根据给定的小时、分钟和秒数生成时间值。
由于GaussDB(DWS)中的time类型的取值范围为00:00:00到24:00:00, 故不支持hour大于24时和hour小于0时的场景。
返回值类型:time
示例:
1 2 3 4 5 |
SELECT maketime(12, 15, 30.12); maketime ------------- 12:15:30.12 (1 row) |
hour(timestamp with time zone)
描述:获取时间中的小时值。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT hour(timestamptz '2025-12-13 12:11:15+06'); hour ------ 14 (1 row) |
minute(timestamp with time zone)
描述:获取时间中的分钟值。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT minute(timestamptz '2025-12-13 12:11:15+06'); minute -------- 11 (1 row) |
second(timestamp with time zone)
描述:获取时间的秒数值。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT second(timestamptz '2025-12-13 12:11:15+06'); second -------- 15 (1 row) |
microsecond(timestamp with time zone)
描述:获取时间中的微秒值。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT microsecond(timestamptz '2025-12-13 12:11:15.123634+06'); microsecond ------------- 123634 (1 row) |
from_unixtime(unix_timestamp[,format])
描述:格式串缺省时,将unix时间戳转换为日期时间类型输出。格式串指定时,将unix时间戳转换为指定格式的字符串输出。
返回值类型:timestamp(格式串缺省)/ text(格式串指定)
示例:
1 2 3 4 5 6 7 8 9 10 |
SELECT from_unixtime(875996580); from_unixtime --------------------- 1997-10-04 20:23:00 (1 row) SELECT from_unixtime(875996580, '%Y %D %M %h:%i:%s'); from_unixtime --------------------------- 1997 5th October 04:23:00 (1 row) |
unix_timestamp([timestamp with time zone])
描述:用于将日期时间值转换为 Unix时间戳(即自1970-01-01 00:00:00 UTC以来经过的秒数)。无入参时,指定为当前时间。
返回值类型:bigint(无入参)/numeric(有入参)
示例:
1 2 3 4 5 |
SELECT unix_timestamp(); unix_timestamp ---------------- 1768793418 (1 row) |
1 2 3 4 5 |
SELECT unix_timestamp('2025-09-08 12:11:13+06'); unix_timestamp ------------------- 1757311873.000000 (1 row) |
now([fsp])
描述:当前事务开始的日期及时间。入参确定微秒输出精度,缺省时为6。
返回值类型:timestamp with time zone
示例:
1 2 3 4 5 |
SELECT now(); now ------------------------------- 2026-01-19 11:35:09.082256+08 (1 row) |
1 2 3 4 5 |
SELECT now(3); now ---------------------------- 2026-01-19 11:35:31.839+08 (1 row) |
last_day(d)
描述:获取日期或者日期时间中对应月份的最后一天。
返回值类型:
- ORA和TD兼容模式下,返回值类型为timestamp。
- MySQL兼容模式下,返回值类型为date。
示例:
1 2 3 4 5 |
SELECT last_day(to_date('2026-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2026-01-31 00:00:00 (1 row) |
next_day(x,y)
描述:用于计算给定时间(x)之后第一个匹配目标星期几(y)的日期。
返回值类型:
- ORA和TD兼容模式下,返回值类型为timestamp。
- MySQL兼容模式下,返回值类型为date。
示例:
1 2 3 4 5 |
SELECT next_day(timestamp '2025-05-21 00:00:00','Sunday')AS cal_result; cal_result --------------------- 2025-05-25 00:00:00 (1 row) |
from_days(days)
描述:根据给定的天数,返回对应的日期值。
返回值类型:date
示例:
1 2 3 4 5 |
SELECT from_days(730669); from_days ------------ 2000-07-03 (1 row) |
to_days(timestamp)
描述:根据指定日期,返回自0年开始的天数。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT to_days(timestamp '2025-10-07'); to_days --------- 739896 (1 row) |