网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
云原生应用网络 ANC
人工智能
AI开发平台ModelArts
盘古大模型 PanguLargeModels
图引擎服务 GES
AI科学计算服务
自动驾驶云服务 Octopus
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
华为HiLens
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
认证测试中心 CTC
边缘安全 EdgeSec
专属云
专属计算集群 DCC
云化转型
云架构中心
云采用框架
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
大数据
MapReduce服务 MRS
数据湖探索 DLI
数据仓库服务 GaussDB(DWS)
云搜索服务 CSS
数据治理中心 DataArts Studio
表格存储服务 CloudTable
可信智能计算服务 TICS
数据接入服务 DIS
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
数智融合计算服务 DataArtsFabric
推荐系统 RES
数据可视化 DLV
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
政企自服务管理 ESM
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
盘古Doer
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
解决方案工作台
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
Huawei Cloud EulerOS
云化数据中心 CloudDC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
人工智能
AI开发平台ModelArts
盘古大模型 PanguLargeModels
图引擎服务 GES
AI科学计算服务
自动驾驶云服务 Octopus
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
华为HiLens
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
认证测试中心 CTC
边缘安全 EdgeSec
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MgC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
弹性内存存储 EMS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
大数据
MapReduce服务 MRS
数据湖探索 DLI
数据仓库服务 GaussDB(DWS)
云搜索服务 CSS
数据治理中心 DataArts Studio
表格存储服务 CloudTable
可信智能计算服务 TICS
数据接入服务 DIS
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
数智融合计算服务 DataArtsFabric
推荐系统 RES
数据可视化 DLV
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
盘古Doer
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
解决方案工作台
数字化诊断治理专家服务
价格
成本优化最佳实践
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
本文导读

展开导读

时间/日期函数

更新时间:2025-05-29 GMT+08:00
分享

age(timestamp, timestamp)

描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。

返回值类型:interval

示例:

1
2
3
4
5
gaussdb=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');
           age           
-------------------------
 43 years 9 mons 27 days
(1 row)

age(timestamp)

描述:当前SQL语句执行开始时刻的系统时间和参数相减,入参可以带或者不带timezone。

返回值类型:interval

示例:

1
2
3
4
5
gaussdb=# SELECT age(timestamp '1957-06-13');
           age           
-------------------------
 60 years 2 mons 18 days
(1 row)

clock_timestamp()

描述:返回当前函数被调用时系统时间的时间戳。该函数为volatile函数,每次扫描都会获取最新的时间戳,因此在一次查询中,每次调用该函数的结果不同。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
gaussdb=# SELECT clock_timestamp();
        clock_timestamp        
-------------------------------
 2017-09-01 16:57:36.636205+08
(1 row)

current_date

描述:返回当前SQL语句启动时的系统日期。

返回值类型:date

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
gaussdb=# SELECT current_date;
    date    
------------
 2017-09-01
(1 row)
-- ORA兼容模式下,打开GUC参数a_format_date_timestamp时
gaussdb=# SET a_format_date_timestamp=on;
SET
gaussdb=# SELECT current_date;
    current_date     
---------------------
 2023-11-24 11:25:09
(1 row)
说明:
  • 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
    • 返回当前SQL语句启动时的系统时间的时间戳。
    • 返回值类型为timestamp without time zone,保留到秒,列名为current_date。
    • 参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。
    • 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统时间的日期。
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
    • current_date支持带括号调用。
    • current_date实际调用的函数为curdate,可以用“\df curdate”指令查询函数详细入参和返回值。

current_time()

描述:当前事务开始时刻的系统时间。在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,返回当前SQL语句执行开始时刻的系统时间。

返回值类型:time with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,类型是time without time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT current_time;
       timetz       
--------------------
 16:58:07.086215+08
(1 row)
-- MYSQL模式下打开参数时
gaussdb_m=# SELECT current_time;
 current_time 
--------------
 15:14:00
(1 row)

current_time([precision])

描述:返回当前SQL语句执行开始时刻的系统时间。

参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,无效精度值都报错。

返回值类型:time without time zone

实现方式:映射成系统函数curtime。

示例:

gaussdb_m=# SELECT current_time();
 current_time 
--------------
 15:14:05
(1 row)
gaussdb_m=# SELECT current_time(3);
 current_time 
--------------
 15:14:08.433
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。curent_time实际调用的函数为curtime,可以用“\df curtime”指令查询函数详细入参和返回值。

current_timestamp

描述:当前日期及时间。语句级别时间,同一个语句内返回结果不变。

返回值类型:MYSQL模式库中的5.7版本下(sql_compatibility = 'MYSQL'、b_format_version='5.7'、b_format_dev_version='s1')返回类型为timestamp without time zone,其他场景下返回类型为timestamp with time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
gaussdb=# SELECT current_timestamp;
       pg_systimestamp        
------------------------------
 2017-09-01 16:58:19.22173+08
(1 row)

-- MYSQL模式库中的5.7版本下
gaussdb_m=# SELECT current_timestamp;
      timestamp
---------------------
 2023-08-21 15:08:24
(1 row)
-- ORA模式下,打开GUC参数a_format_date_timestamp时
gaussdb=# SET a_format_date_timestamp=on;
SET
gaussdb=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2023-11-24 11:31:04.895312+08
(1 row)
说明:

该函数在sql_compatibility = 'ORA'下,或者sql_compatibility = 'MYSQL'下未设置b_format_version、b_format_dev_version参数时,返回结果为最近一条SQL语句启动的系统时间的时间戳,返回值类型为timestamp with time zone,且GUC参数a_format_date_timestamp值为on的情况下,列名为current_timestamp。

在PL/SQL中,简单的赋值语句如:time1 := current_timestamp,被认为是表达式,所以会返回上一条SQL语句启动的系统时间的时间戳。

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:

  • 返回类型为timestamp without time zone。
  • 返回结果的精度为0。
  • 返回的结果为当前SQL语句启动时的系统时间的时间戳。
  • 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他兼容模式下的函数信息,而不是MYSQL兼容模式5.7版本中的函数信息。
  • 当在一个匿名块内多次调用该函数,整个匿名块将被视为一条语句,因此每次调用该函数都会返回相同的结果。

current_timestamp()

描述:返回的结果为当前SQL语句启动时的系统时间。

返回值类型:timestamp without time zone

示例:

1
2
3
4
5
gaussdb=# SELECT current_timestamp();
      timestamp
---------------------
 2023-08-21 14:34:30
(1 row)
说明:

该函数仅支持在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时使用,且有如下行为:

  • 返回类型为timestamp without time zone。
  • 返回结果的精度为0。
  • 返回的结果为当前SQL语句启动时的系统时间的时间戳。
  • 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他模式下的函数信息,而不是MYSQL兼容模式的5.7版本中的函数信息。

current_timestamp(precision)

描述:当前日期及时间,并将结果中的微秒部分按照指定小数位进行显示。

参数:precision表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,如果超过6,则发出告警,并输出精度为6时的时间值;其他无效值将导致报错。

返回值类型:MYSQL模式库中的5.7版本下(sql_compatibility = 'MYSQL'、b_format_version='5.7'、b_format_dev_version='s1')返回类型为timestamp without time zone,其他场景下返回类型为timestamp with time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
gaussdb=# SELECT current_timestamp(1);
       timestamptz            
------------------------------
 2017-09-01 16:58:19.2+08
(1 row)

-- MYSQL模式库中的5.7版本下
gaussdb_m=# SELECT current_timestamp(1);
       timestamp
-----------------------
 2023-08-21 15:09:35.3
(1 row)

-- ORA模式下打开GUC参数a_format_date_timestamp时
gaussdb=# SET a_format_date_timestamp=on;
SET
gaussdb=# SELECT current_timestamp(6);
       current_timestamp       
-------------------------------
 2023-11-24 11:35:57.268592+08
(1 row)
-- 在ORA兼容模式数据库中且参数a_format_version值为10c、a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值
gaussdb=# SET a_format_version='10c';
SET
gaussdb=# SET a_format_dev_version='s2';
SET
gaussdb=# SELECT current_timestamp(6.0);
      current_timestamp       
------------------------------
 2023-11-25 11:14:48.74763+08
(1 row)
说明:
  • 微秒末位的0不显示,如2017-09-01 10:32:19.212000输出显示为2017-09-01 10:32:19.212。
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:
    • 返回类型为timestamp without time zone。
    • 返回的结果为当前SQL语句启动时的系统时间的时间戳。
    • 该函数通过TYPE转化实现,无实际注册函数,因此通过gsql工具的\df+等相关命令查看的为其他模式下的函数信息,而不是MYSQL兼容模式的5.7版本中的函数信息。
  • 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:
    • 返回值类型为timestamp with time zone,列名为current_timestamp。
    • 返回的结果为当前SQL语句启动时的系统时间的时间戳。
    • 当参数a_format_version值为10c、a_format_dev_version值为s2时,precision参数支持numeric类型的整值,否则仅支持int输入。
    • 关闭GUC参数a_format_date_timestamp,当入参为不带小数点的整值时,返回的结果为事务开启的系统的日期和时间;当入参为带小数点的整值时,返回结果为当前SQL语句启动时的系统时间的时间戳。

pg_systimestamp()

描述:当前日期和时间(当前语句的开始)。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
gaussdb=# SELECT pg_systimestamp();
        pg_systimestamp
-------------------------------
 2015-10-14 11:21:28.317367+08
(1 row)

systimestamp()

描述:获取当前系统的日期和时间。

返回值类型:timestamp with time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
gaussdb=# SELECT systimestamp();
         systimestamp          
-------------------------------
 2024-04-16 15:55:21.614342+08
(1 row)
-- behavior_compat_options参数设置sys_function_without_brackets后,支持不带括号调用
gaussdb=# SET behavior_compat_options='sys_function_without_brackets';
gaussdb=# SELECT systimestamp;
         systimestamp          
-------------------------------
 2024-04-16 15:55:21.614342+08
(1 row)
说明:

该函数仅在sql_compatibility = 'ORA'时生效。

systimestamp(precision)

描述:获取当前系统日期及时间,并将结果的微秒部分按照指定precision进行显示。

参数:precision表示精度(秒后小数位数)。INT类型,取值范围[0,6],默认值为6,当超过6时提示WARNING,输出精度为6的时间值。

返回值类型:timestamp with time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
gaussdb=# SELECT systimestamp(6);
         systimestamp          
-------------------------------
 2024-04-16 15:55:21.614342+08
(1 row)
gaussdb=# SELECT systimestamp(9);
WARNING:  TIMESTAMP(9) WITH TIME ZONE precision reduced to maximum allowed, 6
CONTEXT:  referenced column: systimestamp
         systimestamp          
-------------------------------
 2024-04-16 15:59:49.492505+08
(1 row)
gaussdb=# SELECT systimestamp(5.0);
         systimestamp         
------------------------------
 2024-04-16 16:00:23.48079+08
(1 row)
说明:

该函数仅在sql_compatibility = 'ORA'时生效。

date_part(text, timestamp)

描述:获取日期或者时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。

参数:timestamp类型为abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone以及timestamp without time zone。

返回值类型:double precision

示例:

1
2
3
4
5
gaussdb=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40');
 date_part 
-----------
        20
(1 row)

date_part(text, interval)

描述:获取月份的值。如果大于12,则取与12的模。等效于extract(field from timestamp)。

返回值类型:double precision

示例:

1
2
3
4
5
gaussdb=# SELECT date_part('month', interval '2 years 3 months');
 date_part 
-----------
         3
(1 row)

date_trunc(text, timestamp)

描述:截取到参数text指定的精度。

返回值类型:interval、timestamp with time zone以及timestamp without time zone。

示例:

1
2
3
4
5
gaussdb=# SELECT date_trunc('hour', timestamp  '2001-02-16 20:38:40');
     date_trunc      
---------------------
 2001-02-16 20:00:00
(1 row)

trunc(timestamp)

描述:默认按天截取。

参数:类型为timestamp with time zone、timestamp without time zone。

返回值类型: timestamp without time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT trunc(TIMESTAMP  '2001-02-16 20:38:40');                                                                                                                                                                   trunc
---------------------
2001-02-16 00:00:00
(1 row)

gaussdb=# SELECT trunc(TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40');
        trunc        
---------------------
 2001-02-16 00:00:00
(1 row)

trunc(arg1, arg2)

描述:截取到arg2指定的精度。

参数:

  • arg1类型:interval、timestamp with time zone以及timestamp without time zone。
  • arg2类型:text。arg2支持的单位列表如表1 arg2支持的单位列表所示。
表1 arg2支持的单位列表

单位

含义

mil、mils、millennia、millennium

千禧年

c、cc、cent、centuries、century

世纪

dec、decade、decades、decs

年代

y、year、years、yr、yrs、yyyy

q、qtr、quarter

季度

mm、mon、mons、month、months

w、week、weeks

j、d、day、days、dd、ddd

h、hh、hour、hours、hr、hrs

小时

m、mi、min、mins、minute、minutes

分钟

s、sec、second、seconds、secs

millisecon、ms、msec、msecond、mseconds、msecs

毫秒

microsecon、us、usec、usecond、useconds、usecs

微秒

返回值类型:interval、timestamp with time zone以及timestamp without time zone。

示例:

1
2
3
4
gaussdb=# SELECT trunc(timestamp  '2001-02-16 20:38:40', 'hour');                                                                                                                                                                   trunc
---------------------
2001-02-16 20:00:00
(1 row)

round(arg1, arg2)

描述:四舍五入到arg2指定的精度。

参数:

  • arg1类型:timestamp without time zone
  • arg2类型:text

返回值类型:timestamp without time zone

示例:

1
2
3
4
gaussdb=# SELECT round(timestamp  '2001-02-16 20:38:40', 'hour');                                                                                                                                                                   round
---------------------
2001-02-16 21:00:00
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。

daterange(arg1, arg2)

描述:获取时间边界信息。

参数:arg1和arg2的类型为date。

返回值类型:daterange

示例:

1
2
3
4
5
gaussdb=# SELECT daterange('2000-05-06','2000-08-08');
        daterange        
-------------------------
 [2000-05-06,2000-08-08)
(1 row)

daterange(arg1, arg2, text)

描述:获取时间边界信息。

参数:arg1和arg2的类型为date,text类型为text。

返回值类型:daterange

示例:

1
2
3
4
5
gaussdb=# SELECT daterange('2000-05-06','2000-08-08','[]');
        daterange        
-------------------------
 [2000-05-06,2000-08-09)
(1 row)

isfinite(date)

描述:判断日期是否为有限值,是则返回t,否则返回f。

返回值类型:Boolean

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT isfinite(date '2001-02-16');
 isfinite 
----------
 t
(1 row)
gaussdb=# SELECT isfinite(date 'infinity');
 isfinite 
----------
 f
(1 row)

isfinite(timestamp)

描述:判断时间戳是否为有限值,是则返回t,否则返回f。

返回值类型:Boolean

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite 
----------
 t
(1 row)
gaussdb=# SELECT isfinite(timestamp 'infinity');
 isfinite 
----------
 f
(1 row)

isfinite(interval)

描述:判断时间间隔是否为有限值,是则返回t,暂不支持返回f,输入'infinity'会报错。

返回值类型:Boolean

示例:

1
2
3
4
5
gaussdb=# SELECT isfinite(interval '4 hours');
 isfinite 
----------
 t
(1 row)

justify_days(interval)

描述:将时间间隔中的天数部分调整为以月(30天为一月)为单位。

返回值类型:interval

示例:

1
2
3
4
5
gaussdb=# SELECT justify_days(interval '35 days');
 justify_days 
--------------
 1 mon 5 days
(1 row)

justify_hours(interval)

描述:将时间间隔中的小时部分调整为以天(24小时为一天)为单位。

返回值类型:interval

示例:

1
2
3
4
5
gaussdb=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS');
 justify_hours  
----------------
 1 day 03:00:00
(1 row)

justify_interval(interval)

描述:结合justify_days和justify_hours,调整interval。

返回值类型:interval

示例:

1
2
3
4
5
gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR');
 justify_interval 
------------------
 29 days 23:00:00
(1 row)

localtime()

描述:当前事务的开始时刻的系统时间。在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回当前SQL语句执行开始时刻的系统日期和时间。

返回值类型:time,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回类型timestamp without time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT localtime AS RESULT;
     result
----------------
 16:05:55.664681
(1 row)
-- MYSQL模式,打开兼容性参数后
gaussdb_m=# SELECT localtime;
      localtime      
---------------------
 2023-08-21 15:21:57
(1 row)

localtime[([precision])]

描述:返回当前SQL语句执行开始时刻的系统日期和时间。

参数:表示精度(秒后小数位数),int类型,范围为[0,6],缺省时默认值为0,无效值都报错。

返回值类型:timestamp without time zone

实现方式:注册系统函数的localtime。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb_m=# SELECT localtime();
      localtime      
---------------------
 2023-08-21 15:23:49
(1 row)
gaussdb_m=# SELECT localtime(3);
        localtime        
-------------------------
 2023-08-21 15:23:51.965
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

localtimestamp

描述:当前日期及时间。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
gaussdb=# SELECT localtimestamp;
         timestamp          
----------------------------
 2017-09-01 17:03:30.781902
(1 row)
-- MYSQL兼容模式下,打开兼容性参数
gaussdb_m=# SELECT localtimestamp;
      timestamp      
---------------------
 2023-08-21 15:27:55
(1 row)
-- ORA兼容模式下打开GUC参数a_format_date_timestamp时
gaussdb=# SET a_format_date_timestamp=on;
SET
gaussdb=# SELECT localtimestamp;
       localtimestamp       
----------------------------
 2023-11-24 11:38:25.633231
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有如下行为:

  • 返回当前SQL语句执行开始时刻的系统日期和时间。
  • 返回类型timestamp without time zone,列名为timestamp。

该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下有如下行为:

  • 返回值类型为timestamp without time zone,列名为localtimestamp。
  • 返回的结果为当前SQL语句启动时的系统时间的时间戳。
  • 防止优化器提前获取常数时间,造成gplan场景下时间获取不正确。
  • 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统的日期和时间。

localtimestamp[([precision])]

描述:当前日期及时间。

参数:表示精度(秒后小数位数),int类型,取值范围为[0,6],缺省时默认值为0,如果超过6,则发出告警,并输出精度为6时的时间值;其他无效值将导致报错。

返回值类型:timestamp without time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- 带括号且无入参调用仅在MYSQL兼容模式下支持
gaussdb_m=# SELECT localtimestamp();
      timestamp      
---------------------
 2023-08-21 15:27:59
(1 row)
gaussdb_m=# SELECT localtimestamp(3);
        timestamp        
-------------------------
 2023-08-21 15:28:02.445
(1 row)
-- ORA兼容模式下,打开GUC参数a_format_date_timestamp时
gaussdb=# SET a_format_date_timestamp=on;
SET
gaussdb=# SELECT localtimestamp(6);
       localtimestamp       
----------------------------
 2023-11-24 11:41:14.086227
(1 row)
-- 在ORA兼容模式数据库中且参数a_format_version值为10c、a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值
gaussdb=# SET a_format_version='10c';
SET
gaussdb=# SET a_format_dev_version='s2';
SET
gaussdb=# SELECT localtimestamp(6.0);
       localtimestamp       
----------------------------
 2023-11-24 11:42:45.642167
(1 row)
说明:
  • 微秒末位的0不显示,如2017-09-01 10:32:19.212000输出显示为2017-09-01 10:32:19.212。
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,返回当前SQL语句执行开始时刻的系统日期和时间,支持带括号且无入参调用。
  • 该函数在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下,有以下行为:
    • 返回当前SQL语句启动时的系统时间的时间戳。
    • 返回值类型为timestamp without time zone,列名为localtimestamp。
    • 当参数a_format_version值为10c、a_format_dev_version值为s2时,precision参数支持numeric类型的整值,否则仅支持int输入。
    • 关闭GUC参数a_format_date_timestamp,返回的结果为事务开启的系统的日期和时间。

maketime(hour, minute, second)

描述:通过入参hour、minute、second生成对应time类型时间,其中三个入参类型分别为bigint、bigint和numeric。

返回值类型:time

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT maketime(8, 15, 26.53);
  maketime
-------------
 08:15:26.53
(1 row)

gaussdb=# SELECT maketime(-888, 15, 26.53);
  maketime
------------
 -838:59:59
(1 row)
说明:

该函数仅支持sql_compatibility = 'MYSQL',GUC参数b_format_version='5.7'、b_format_dev_version='s1'时使用,且有如下行为:

  • 当参数满足如下任一条件时,函数返回NULL。
    • 入参minute < 0 或 minute >= 60。
    • 入参second < 0 或 second >= 60。
    • 任一参数为NULL。
  • 返回的time类型结果保留6位小数,若second超出六位小数,则按照四舍五入进位。
  • 返回time类型值要求在[-838:59:59, 838:59:59]中。若超出范围,则根据hour的正负来返回指定的边界值。
  • maketime不支持自嵌套。

now()

描述:当前事务的开始时刻的系统的日期及时间,同一个事务内返回结果相同。仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回当前SQL语句执行开始时刻的系统日期和时间。

返回值类型:timestamp with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回类型为timestamp without time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT now();
              now              
-------------------------------
 2017-09-01 17:03:42.549426+08
(1 row)
-- MYSQL模式下,打开兼容性参数
gaussdb_m=# SELECT now();
      timestamp      
---------------------
 2023-08-21 17:17:42
(1 row)

now(precision)

描述:返回当前SQL语句执行开始时刻的系统日期和时间。

参数:precision表示精度(秒后小数位数),int类型,取值范围为[0,6],缺省时默认值为0,如果超过6,则发出整型值告警,输出精度为6时的时间值;其他无效值将都导致报错。

返回值类型:timestamp without time zone

实现方式:'now' :: text :: timestamp without time zone表达式获取。

示例:

1
2
3
4
5
gaussdb_m=# SELECT now(3);
        timestamp        
-------------------------
 2023-08-21 17:17:48.819
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

timenow()

描述:返回当前SQL语句执行开始时刻的系统日期和时间。

返回值类型:abstime

示例:

1
2
3
4
5
gaussdb=# SELECT timenow();
        timenow
------------------------
 2020-06-23 20:36:56+08
(1 row)

dbtimezone

描述:当前数据库的时区。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT dbtimezone;
        dbtimezone
------------------------
 PRC
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。

numtodsinterval(num, interval_unit)

描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。

可以通过设置GUC参数intervalstyle为oracle,兼容该函数interval输出格式。

返回值类型:interval

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
gaussdb=# SELECT numtodsinterval(100, 'HOUR');
 numtodsinterval 
-----------------
 100:00:00
(1 row)

gaussdb=# SET intervalstyle = oracle;
SET
gaussdb=# SELECT numtodsinterval(100, 'HOUR');
        numtodsinterval
-------------------------------
 +000000004 04:00:00.000000000
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下:当参数interval_unit为 'DAY' 时,参数num超过1000000000会报错。

numtoyminterval(num, interval_unit)

描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('YEAR' | 'MONTH')。

可以通过设置GUC参数intervalstyle为oracle,兼容该函数interval输出格式。

返回值类型:interval

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
gaussdb=# \c gaussdb_o;
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "gaussdb_o" as user "omm".
gaussdb_o=# SET a_format_version='10c';
SET
gaussdb_o=# SET a_format_dev_version='s2';
SET
gaussdb=# SELECT numtoyminterval(100, 'MONTH');
 numtoyminterval 
-----------------
 8 years 4 mons
(1 row)
gaussdb_o=# SET intervalstyle = oracle;
SET
gaussdb_o=# SELECT numtoyminterval(100, 'MONTH');
 numtoyminterval
-----------------
 8-4
(1 row)

gaussdb_o=# \c postgres
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "omm".
gaussdb=# DROP DATEBASE gaussdb_o;
DROP DATABASE
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。

new_time(date, timezone1,timezone2)

描述:当timezone1所表示时区的日期时间为date时,返回此时timezone2所表示时区的日期时间值。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT new_time('1997-10-10','AST','EST');
      new_time       
---------------------
 1997-10-09 23:00:00
(1 row)
gaussdb=# SELECT NEW_TIME(TO_TIMESTAMP ('10-Sep-02 14:10:10.123000','DD-Mon-RR HH24:MI:SS.FF'), 'AST', 'PST');
        new_time         
-------------------------
 2002-09-10 10:10:10.123
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。

sessiontimezone()

描述:当前会话的时区,无入参。

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT SESSIONTIMEZONE;
 session_time_zone 
-------------------
 PST8PDT
(1 row)
gaussdb=# SELECT LOWER(SESSIONTIMEZONE);
   lower   
-----------
 @ 8 hours
(1 row)
说明:
  • 此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  • 当set session time zone的值为GMT+08:00/GMT-08:00格式时,正值的偏移量被用于格林威治以西的位置,例如GMT+08:00表示西八区,GMT-08:00表示东八区。

sys_extract_utc(timestamp| timestamptz)

描述:从具有时区偏移量或时区区域名称的日期时间值中提取UTC(协调世界时-以前称为格林威治平均时间)。如果未指定时区,则日期时间与会话时区关联。入参有timestamp和timestamptz两种形式。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00'); 
   sys_extract_utc   
---------------------
 2000-03-28 03:30:00
(1 row)
gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMPTZ '2000-03-28 11:30:00.00 -08:00'); 
   sys_extract_utc   
---------------------
 2000-03-28 19:30:00
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。

tz_offset('time_zone_name' | '(+/-)hh:mi' | SESSIONTIMEZONE | DBTIMEZONE)

描述:入参有以上四种形式,返回入参所表示时区的UTC偏移量。

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT TZ_OFFSET('US/Pacific');
 tz_offset 
-----------
 -08:00
(1 row)
gaussdb=# SELECT TZ_OFFSET(sessiontimezone);
 tz_offset 
-----------
 +08:00
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。

pg_sleep(seconds)

描述:服务器线程延迟时间,单位为秒。注意,当数据库调用该函数时,会获取相应的事务快照,相当于一个长事务,如果入参时间过长可能导致数据库oldestxmin无法推进,影响表的回收和查询性能。

返回值类型:void

示例:

1
2
3
4
5
gaussdb=# SELECT pg_sleep(10);
 pg_sleep 
----------

(1 row)

statement_timestamp()

描述:当前日期和时间(当前语句的开始)。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
gaussdb=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2017-09-01 17:04:39.119267+08
(1 row)

sysdate

描述:返回当前SQL语句执行时刻的系统日期和时间。

返回值类型:timestamp

示例:

1
2
3
4
5
gaussdb=# SELECT sysdate;
       sysdate       
---------------------
 2017-09-01 17:04:49
(1 row)

sysdate([precision])

描述:返回函数执行时刻的系统日期和时间。

参数:表示时间精度,int类型,范围为[0,6],缺省时默认值为0。

返回值类型:timestamp without time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb_m=# SELECT sysdate();
      sysdate()      
---------------------
 2023-08-21 17:17:42
(1 row)
gaussdb_m=# SELECT sysdate(3);
        sysdate(3)        
-------------------------
 2023-08-21 17:17:48.819
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

current_sysdate()

描述:返回当前SQL语句执行开始时刻的系统日期和时间。

返回值类型:timestamp

示例:

1
2
3
4
5
gaussdb=# SELECT current_sysdate();
   current_sysdate   
---------------------
 2023-06-20 20:09:02
(1 row)

timeofday()

描述:返回当前函数被调用时的系统时间的时间戳(类似于clock_timestamp函数,但返回类型为text)。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT timeofday();
              timeofday              
-------------------------------------
 Fri Sep 01 17:05:01.167506 2017 CST
(1 row)

transaction_timestamp()

描述:当前事务开始的系统日期及时间。

返回值类型:timestamp with time zone,在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时返回timestamp without time zone。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT transaction_timestamp();
     transaction_timestamp     
-------------------------------
 2017-09-01 17:05:13.534454+08
(1 row)
-- MYSQL模式打开兼容性开关
gaussdb=#  SELECT transaction_timestamp();
   transaction_timestamp    
----------------------------
 2023-09-07 09:32:09.728998
(1 row)

add_months(d,n)

描述:用于计算时间点d再加上n个月的时间。

参数:

  • d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。
  • n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。

返回值类型:timestamp

示例:

1
2
3
4
5
gaussdb=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy;
     add_months      
---------------------
 2018-04-29 00:00:00
(1 row)
说明:
此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下:
  • 当计算结果大于公元9999年时会报错。
  • 参数n若入参为小数则不会被四舍五入,而是被截断。

last_day(d)

描述:用于计算时间点d当月最后一天的时间。

返回值类型:timestamp

示例:

1
2
3
4
5
gaussdb=# SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result;
     cal_result      
---------------------
 2017-01-31 00:00:00
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,使用last_day函数将会调用内置函数b_db_last_day,入参类型可为TEXT、DATE、DATETIME和TIME数据类型。返回值为date类型,支持输入datetime样式数字。

months_between(d1, d2)

描述:用于计算时间点d1和时间点d2的月份差值,如果两个日期都是月末或天数相同,则返回整数,否则返回值带小数,按31天/月计算。

返回值类型:numeric

示例:

gaussdb=# SELECT months_between(to_date('2022-10-31', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
 months_between 
----------------
             1
(1 row)

gaussdb=# SELECT months_between(to_date('2022-10-30', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
 months_between 
----------------
             1
(1 row)

gaussdb=# SELECT months_between(to_date('2022-10-29', 'yyyy-mm-dd'), to_date('2022-09-30', 'yyyy-mm-dd'));
    months_between     
-----------------------
 .96774193548387096774
(1 row)
说明:

此函数在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。

next_day(x,y)

描述:用于计算时间点x开始的下一个星期几(y)的时间。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
gaussdb=# SELECT next_day(timestamp '2017-05-25 00:00:00','Sunday')AS cal_result;
     cal_result      
---------------------
 2017-05-28 00:00:00
(1 row)
gaussdb=# SELECT next_day(timestamp '2024-01-17 00:00:00', 7.9999999);
ERROR:  Week day out of range, the range is 1 ... 7
CONTEXT:  referenced column: next_day
gaussdb=# SET a_format_version='10c';
SET
gaussdb=# SET a_format_dev_version='s1';
SET
gaussdb=# SELECT next_day(timestamp '2024-01-17 00:00:00', 7.9999999);
      next_day       
---------------------
 2024-01-20 00:00:00
(1 row)
说明:
  • 此函数在ORA兼容模式数据库中,参数a_format_version值为10c和a_format_dev_version值为s1的情况下,且第二个参数为浮点数时,将舍弃小数部分,否则将按照四舍五入计算。
  • 此函数在ORA兼容模式数据库中,当参数a_format_version值为10c和a_format_dev_version值为s1时,第一个参数的类型才可以是TIMESTAMP WITH TIME ZONE。
  • next_day第二个参数支持缩写(不区分大小写),包括SUN、MON、TUE、WED、THU、THUR、FRI、SAT。

tinterval(abstime, abstime)

描述:用两个绝对时间创建时间间隔。

返回值类型:tinterval

示例:

1
2
3
4
5
gaussdb=# CALL tinterval(abstime 'May 10, 1947 23:59:12', abstime 'Mon May  1 00:30:30 1995');
                      tinterval
-----------------------------------------------------
 ["1947-05-10 23:59:12+08" "1995-05-01 00:30:30+08"]
(1 row)

tintervalend(tinterval)

描述:返回tinterval的结束时间。

返回值类型:abstime

示例:

1
2
3
4
5
gaussdb=# SELECT tintervalend('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');
      tintervalend
------------------------
 1983-10-04 23:59:12+08
(1 row)

tintervalrel(tinterval)

描述:计算并返回tinterval的相对时间。

返回值类型:reltime

示例:

1
2
3
4
5
gaussdb=# SELECT tintervalrel('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');
 tintervalrel
--------------
 1 mon
(1 row)

smalldatetime_ge(smalldatetime, smalldatetime)

描述:判断第一个参数是否大于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_cmp(smalldatetime, smalldatetime)

描述:对比smalldatetime是否相等。

参数:smalldatetime, smalldatetime

返回值类型:integer

smalldatetime_eq(smalldatetime, smalldatetime)

描述:对比smalldatetime是否相等。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_gt(smalldatetime, smalldatetime)

描述:判断第一个参数是否小于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_hash(smalldatetime)

描述:计算timestamp对应的哈希值。

参数:smalldatetime

返回值类型:integer

smalldatetime_in(cstring, oid, integer)

描述:输入timestamp。

参数:cstring, oid, integer

返回值类型:smalldatetime

smalldatetime_larger(smalldatetime, smalldatetime)

描述:返回较大的timestamp。

参数:smalldatetime, smalldatetime

返回值类型:smalldatetime

smalldatetime_le(smalldatetime, smalldatetime)

描述:判断第一个参数是否小于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_lt(smalldatetime, smalldatetime)

描述:判断第一个参数是否大于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_ne(smalldatetime, smalldatetime)

描述:比较两个timestamp是否不相等。

参数:smalldatetime, smalldatetime

返回值类型:boolean

smalldatetime_out(smalldatetime)

描述:timestamp转换为外部形式。

参数:smalldatetime

返回值类型:cstring

smalldatetime_send(smalldatetime)

描述:timestamp转换为二进制格式。

参数:smalldatetime

返回值类型:bytea

smalldatetime_smaller(smalldatetime, smalldatetime)

描述:返回较小的一个smalldatetime。

参数:smalldatetime, smalldatetime

返回值类型:smalldatetime

smalldatetime_to_abstime(smalldatetime)

描述:smalldatetime转换为abstime。

参数:smalldatetime

返回值类型:abstime

smalldatetime_to_time(smalldatetime)

描述:smalldatetime转换为time。

参数:smalldatetime

返回值类型:time without time zone

smalldatetime_to_timestamp(smalldatetime)

描述:smalldatetime转换为timestamp。

参数:smalldatetime

返回值类型:timestamp without time zone

smalldatetime_to_timestamptz(smalldatetime)

描述:smalldatetime转换为timestamptz。

参数:smalldatetime

返回值类型:timestamp with time zone

smalldatetime_to_varchar2(smalldatetime)

描述:smalldatetime转换为varchar2。

参数:smalldatetime

返回值类型:character varying

说明:

获取当前时间有多种方式,请根据实际业务从场景选择合适的接口:

  1. 以下接口按照当前事务的开始时刻返回值:
    CURRENT_DATE CURRENT_TIME
    CURRENT_TIME(precision)
    CURRENT_TIMESTAMP(precision)
    LOCALTIME
    LOCALTIMESTAMP
    LOCALTIME(precision)
    LOCALTIMESTAMP(precision)
    transaction_timestamp()
    now()

    其中CURRENT_TIME和CURRENT_TIMESTAMP(precision)传递带有时区的值;LOCALTIME和LOCALTIMESTAMP传递的值不带时区。CURRENT_TIME、LOCALTIME和LOCALTIMESTAMP可以指定精度参数,这会导致结果在秒字段中四舍五入到小数位数。如果没有精度参数,结果将提供所能得到的全部精度。

    因为这些函数全部都按照当前事务的开始时刻返回结果,所以它们的值在事务运行的整个期间内都不改变。可以认为这是一个特性:目的是为了允许一个事务在“当前”时间上有一致的概念,这样在同一个事务里的多个修改可以保持同样的时间戳。其中transaction_timestamp()等价于CURRENT_TIMESTAMP(precision),表示当前语句所在事务的开启时间。now()等效于transaction_timestamp()。

    需要特别注意的是,当事务开启时,在sql_compatibility = 'ORA',且GUC参数a_format_date_timestamp值为on的情况下,CURRENT_DATE、CURRENT_TIMESTAMP(precision)、LOCALTIMESTAMP和LOCALTIMESTAMP(precision)函数返回当前SQL语句启动时的时间戳。如果关闭GUC参数a_format_date_timestamp,这些函数则返回事务开启时的日期或日期及时间。

    在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时CURDATE、CURRENT_DATE、CURTIME、CURRENT_TIME、CURRENT_TIMESTAMP、NOW、LOCALTIME、LOCALTIMESTAMP、UTC_TIME、UTC_TIMESTAMP都返回SQL语句开始执行的时间,SYSDATE返回函数调用开始的时间。此外,transaction_timestamp()依然表示事务开始时间,但其返回值类型修改为timestamp without time zone。

  2. 以下接口返回当前语句开始时间:
    statement_timestamp()

    statement_timestamp()返回当前语句的开始时刻(更准确的说是收到客户端最后一条命令的时间)。在事务的第一条命令执行期间,statement_timestamp()和transaction_timestamp()的返回值相同,但在随后的命令中,二者的返回值可能不同。

  3. 以下接口返回函数被调用时的真实当前时间:
    clock_timestamp()
    timeofday() 

    clock_timestamp()返回真正的当前时间,因此其值在同一条SQL命令中会发生变化。timeofday()与clock_timestamp()相似,也返回真实的当前时间,但其结果是一个格式化的text串,而不是timestamp with time zone值。

convert_tz(dt, from_tz, to_tz)

描述:将时间日期值dt从from_tz时区转换到to_tz时区。

参数:参数介绍如表2 参数说明所示。

表2 参数说明

参数

类型

描述

取值范围

dt

datetime、date、text、numeric类型。

时间日期值。

[0000-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999]。

from_tz/to_tz

±hh:mm格式的字符串。

表示相较于UTC时间的偏移,如'+08:00'。

[-15:59, 15:00]。

命名时区。

如'MET'、'UTC'等。

具体请参见PG_TIMEZONE_NAMES系统视图。

返回值类型:datetime

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
gaussdb=# SET b_format_dev_version = 's1';
SET
gaussdb=# SET b_format_version = '5.7';
SET
gaussdb=# SELECT convert_tz(cast('2023-01-01 10:10:10' as datetime), '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 11:10:10
(1 row)
gaussdb=# SELECT convert_tz(cast('2023-01-01' as date), '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 01:00:00
(1 row)
gaussdb=# SELECT convert_tz('2023-01-01 10:10:10', '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 11:10:10
(1 row)
gaussdb=# SELECT convert_tz('2023-01-01', '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 01:00:00
(1 row)
gaussdb=# SELECT convert_tz(20230101101010, '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 11:10:10
(1 row)
gaussdb=# SELECT convert_tz(20230101, '+00:00', '+01:00');
     convert_tz      
---------------------
 2023-01-01 01:00:00
(1 row)
gaussdb=# SELECT convert_tz('2023-01-01 10:10:10', 'UTC', 'PRC');
     convert_tz      
---------------------
 2023-01-01 18:10:10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

sec_to_time(seconds)

描述:将seconds表示的秒数转换为time类型的时间。

参数:参数介绍如表3 参数说明所示。

表3 参数说明

参数

类型

描述

取值范围

seconds

numeric、text类型。

秒数。

[-3020399, +3020399],对应time类型范围[-838:59:59, 838:59:59],对于越界输入会截断到边界值。

返回值类型:time without time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
gaussdb=# SET b_format_dev_version = 's1';
SET
gaussdb=# SET b_format_version = '5.7';
SET
gaussdb=# SELECT sec_to_time(2000);
 sec_to_time 
-------------
 00:33:20
(1 row)
gaussdb=# SELECT sec_to_time('-2000');
 sec_to_time 
-------------
 -00:33:20
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

adddate(date, INTERVAL val unit)

描述:将日期加上一定的时间间隔,返回一个新的日期。

参数:参数介绍如表4 参数说明所示。

表4 参数说明

参数

类型

描述

取值范围

date

时间类型表达式、text、datetime、date或time等类型

需加上时间间隔的日期。

和类型范围一致。

val

整数、浮点数、字符串等类型

需加上的时间间隔。

和类型范围一致。

unit

关键字

时间间隔的单位。

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND等,具体请参见时间间隔表达式

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。

示例:

1
2
3
4
5
gaussdb=# SELECT ADDDATE('2018-05-01', INTERVAL 1 DAY);
  adddate   
------------
 2018-05-02
(1 row)
说明:
  1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  2. 在PREPARE语句中,adddate函数的第二个参数为interval表达式,当使用参数$1完全替代时,会导致结果不符合预期,例如:PREPARE p1 AS SELECT adddate('2023-01-01 10:00:00', $1); EXECUTE p1(interval 13 hour);此用例返回的非预期结果值为'2023-01-01 10:00:00'。

adddate(expr, days)

描述:将日期加上一定的天数值,返回一个新的日期。

参数:

  • expr:指定开始的日期时间,时间类型表达式,TEXT、DATE、DATETIME或TIME等类型。
  • days:需要加上的天数,int类型。

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE

示例:

gaussdb=# SELECT ADDDATE('2018-05-01', 1);
  adddate   
------------
 2018-05-02
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

curdate()

描述:返回本地函数调用开始时刻的系统日期。支持在同一连接内修改时区,返回的日期受时区影响。

返回值类型:date

示例:

1
2
3
4
5
gaussdb=# SELECT curdate();
  curdate   
------------
 2023-08-10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

curtime([precision])

描述:返回SQL调用开始时刻的系统时间。

参数:表示精度(秒后小数的位数),int类型,取值范围为[0,6],缺省时默认值为0,如果提供的值能够转换为范围内的整型值,函数将返回对应精度的时间值,否则将报错。

返回值类型:time without time zone

实现方式:注册系统函数curtime。

示例:

1
2
3
4
5
gaussdb=# SELECT curtime(3);
   curtime    
--------------
 16:59:57.203
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

date_add(date,INTERVAL val unit)

描述:向指定日期添加一段时间,并返回计算结果。

参数:参数介绍如表5 参数说明所示。

表5 参数说明

参数

类型

描述

取值范围

date

时间类型表达式、text、datetime、date或time等类型

要加上时间间隔的日期。

和类型范围一致。

val

整数、浮点数、字符串等类型

要加上的时间间隔。

和类型范围一致。

unit

关键字

时间间隔的单位。

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND等,详见时间间隔表达式

返回值类型:单个返回值,具体返回类型描述如表6 返回值类型说明所示。

表6 返回值类型说明

返回值类型

描述

TEXT

当date入参为text类型。

DATE

当date入参为date类型,且unit入参大于等于day(如week、month)。

TIME WITHOUT TIMEZONE

当date入参为time类型。

DATETIME

当date入参为datetime类型;或当date入参为date类型,且unit入参小于day(如hour、second)。

示例:

gaussdb=#  SELECT DATE_ADD('2018-05-01', INTERVAL 1 DAY);
  date_add  
------------
 2018-05-02
(1 row)
说明:
  1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  2. 在PREPARE语句中,date_add的第二个参数为interval表达式,不支持使用参数$1替代,例如:PREPARE p1 AS SELECT date_add('2023-01-01 10:00:00', $1);

date_add(expr, days)

描述:将日期加上一定的天数值,返回一个新的日期。

参数:

  • expr:指定开始的日期时间,时间类型表达式,TEXT、DATE、DATETIME或TIME等类型。
  • days:需要加上的天数,int类型。

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE

示例:

gaussdb=# SELECT DATE_ADD('2018-05-01', 1);
  date_add  
------------
 2018-05-02
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

date_format(date, format)

描述:将日期时间以指定格式输出。

参数:参数介绍如表7 参数说明所示。

表7 参数说明

参数

类型

描述

取值范围

date

时间类型表达式、TEXT、DATETIME、DATE或TIME等类型

需要格式化的日期。

和类型范围一致。

format

text

格式化字符串。

表8 format的取值及含义所示。

format参数列表如表8 format的取值及含义所示。
表8 format的取值及含义

format取值

含义

%a

星期的缩写(Sun..Sat)。

%b

月份的缩写(Jan..Dec)。

%c

月份数字(0..12)。

%D

带有英语前缀的月份中的每天(0th, 1st, 2nd, 3rd, …)。

%d

月份中的每天的两位数字表示(00..31)。

%e

月份中的每天的数字表示(0..31)。

%f

微秒(000000..999999)。

%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

两位数字月份(00..12)。

%p

AM或者PM。

%r

十二小时制时间(hh:mm:ss后跟AM或PM)。

%S

秒(00..59)。

%s

秒(00..59)。

%T

二十四小时制时间(hh:mm:ss)。

%U

一年中的星期(00..53),每周的开始是星期天。

%u

一年中的星期(00..53),每周的开始是星期一。

%V

一年中的星期(01..53),每周的开始是星期天。

%v

一年中的星期(01..53),每周的开始是星期一。

%W

星期的名称(Sunday..Saturday)。

%w

星期中的每天(0=星期天..6=星期六)。

%X

一年中的星期,每周的开始是星期天,四位数字,用于%V。

%x

一年中的星期,每周的开始是星期一,四位数字,用于%v。

%Y

四位数字年份。

%y

两位数字年份。

返回值类型:text

示例:

gaussdb=# SELECT date_format('2023-10-11 12:13:14.151617','%b %c %M %m');    
     date_format    
-------------------
 Oct 10 October 10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

date_sub(date, INTERVAL val unit)

描述:将日期减上一定的时间间隔,返回一个新的日期。

参数:参数介绍如表9 参数说明所示。

表9 参数说明

参数

类型

描述

取值范围

date

时间类型表达式、text、datetime、date或time等类型

要加上时间间隔的日期。

和类型范围一致。

val

整数、浮点数、字符串等类型

要加上的时间间隔。

和类型范围一致。

unit

关键字

时间间隔的单位。

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND等,具体请参见时间间隔表达式

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。

示例:

gaussdb=#  SELECT DATE_SUB('2018-05-01', INTERVAL 1 YEAR);
  date_sub  
------------
 2017-05-01
(1 row)
说明:
  1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  2. 在PREPARE语句中,date_sub的第二个参数为interval表达式,不支持使用参数$1替代,例如:PREPARE p1 AS SELECT date_sub('2023-01-01 10:00:00', $1);

date_sub(expr, days)

描述:指定开始的日期时间和要从开始的日期时间减去的天数值,返回相减后的日期结果值。

参数:

  • expr:指定开始的日期时间,时间类型表达式,TEXT、DATE、DATETIME或TIME等类型。
  • days:需要减去的天数,int类型。

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。

示例:

gaussdb=#  SELECT DATE_SUB('2023-1-1', 20);
  date_sub  
------------
 2022-12-12
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

datediff(expr1, expr2)

描述:返回两个时间表达式之间相差的天数。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:int

示例:

gaussdb=#  SELECT datediff('2021-11-12','2021-11-13');
 datediff 
----------
       -1
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

day()/dayofmonth()

描述:提取日期时间的天数部分,将结果返回。dayofmonth()是day()的别名,功能完全相同。

参数:入参为指定提取的日期时间,是时间类型表达式、text、datetime、date或time等类型。

返回值类型:int

示例:

gaussdb=# SELECT day('2023-01-02');
 day 
-----
   2
(1 row)
gaussdb=# SELECT dayofmonth('23-05-22');
 dayofmonth 
------------
         22
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

dayname()

描述:返回日期的星期几名称。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:text

示例:

gaussdb=# SELECT dayname('2023-10-11');
  dayname  
-----------
 Wednesday
(1 row)
说明:
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  • 返回值使用的语言由GUC参数lc_time_names控制。

dayofweek()

描述:返回日期的工作日索引(1=周日,2=周一,…,7=周六)。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT dayofweek('2023-04-16');
 dayofweek 
-----------
         1
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

dayofyear()

描述:返回一年中的第几天。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:int,取值范围为[1,366]。

示例:

gaussdb=# SELECT dayofyear('2000-12-31');
 dayofyear 
-----------
       366
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

extract(unit FROM date)

描述:提取时间的一部分 ,此函数在其他模式可以使用,但行为差异较大。当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'时该函数的表现如下所述。

参数:

  • unit:text。具体的取值类型如表10 unit的取值及含义所示。
  • date:date、time、datetime以及text等时间类型表达式。

返回值类型:bigint

表10 unit的取值及含义

UNIT 取值

含义

MICROSECOND

微秒

SECOND

MINUTE

分钟

HOUR

小时

DAY

天数

WEEK

周数

MONTH

月份

QUARTER

季度

YEAR

年份

SECOND_MICROSECOND

秒、微秒的拼接值

MINUTE_MICROSECOND

分钟、秒、微秒的拼接值

MINUTE_SECOND

分钟、秒的拼接值

HOUR_MICROSECOND

小时、分钟、秒、微秒的拼接值

HOUR_SECOND

小时、分钟、秒的拼接值

HOUR_MINUTE

小时、分钟的拼接值

DAY_MICROSECOND

天数、小时、分钟、秒、微秒的拼接值

DAY_SECOND

天数、小时、分钟、秒的拼接值

DAY_MINUTE

天数、分钟的拼接值

DAY_HOUR

天数、小时的拼接值

YEAR_MONTH

年份、月份的拼接值

EPOCH

表示自1970-01-01 00:00:00-00 UTC以来的秒数或时间间隔的总秒数

示例:

gaussdb=# SELECT extract(YEAR FROM '2023-10-11');
 extract 
---------
    2023
(1 row)
 
gaussdb=# SELECT extract(QUARTER FROM '2023-10-11');
 extract 
---------
       4
(1 row)
 
gaussdb=# SELECT extract(MONTH FROM '2023-10-11');
 extract 
---------
      10
(1 row)
 
gaussdb=# SELECT extract(WEEK FROM '2023-10-11');
 extract 
---------
      41
(1 row)
 
gaussdb=# SELECT extract(DAY FROM '2023-10-11');
 extract 
---------
      11
(1 row)
 
gaussdb=# SELECT extract(HOUR FROM '2023-10-11 12:13:14');
 extract 
---------
      12
(1 row)
说明:

extract在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,调用的函数实际上注册为b_extract,在其他情况中,实际注册的函数为date_part,可以用“\df b_extract”等指令查询函数详细入参与返回值。

GUC参数default_week_format用于处理特殊周问题,默认值为0。详细描述如表11 default_week_format说明所示。

表11 default_week_format说明

default_week_format

一周的第一天

范围

哪一周是第一周

0

周日

0~53

今年有周日的周。

1

周一

0~53

今年有4天及以上的周。

2

周日

1~53

今年有周日的周。

3

周一

1~53

今年有4天及以上的周。

4

周日

0~53

今年有4天及以上的周。

5

周一

0~53

今年有周一的周。

6

周日

1~53

今年有4天及以上的周。

7

周一

1~53

今年有周一的周。

from_days(days)

描述:给定一个天数,返回相应的日期值。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:date

示例:

gaussdb=# SELECT from_days(36524);--0099-12-31
 from_days  
------------
 0099-12-31
(1 row)
说明:
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  • 对于空字符和0字符,将作为0处理;对于无法正确转换为bigint的入参,将报错。
  • 入参小于366时,返回日期为0000-00-00。

from_unixtime(unix_timestamp[,format])

描述:将Unix时间戳转换为日期时间格式的函数。Unix时间戳是指从1970年1月1日08:00:00 UTC到指定时间的秒数。

参数:

  • unix_timestamp:unix时间戳,numeric类型。
  • format:时间格式,text类型。

返回值类型:text/datetime

示例:

gaussdb=# SELECT from_unixtime(1111885200);
    from_unixtime    
---------------------
 2005-03-27 09:00:00
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

get_format({DATE | TIME | DATETIME | TIMESTAMP}, {'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL'})

描述:将日期或时间或datetime转换为指定格式的时间格式字符串,即不同地区的“年月日 时分秒”格式和排序标准。

参数:

  • DATE|TIME|DATETIME|TIMESTAMP:表示时间类型,为关键字
  • 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL':五种时间格式,text类型。

返回值类型:text

示例:

gaussdb=# SELECT get_format(date, 'eur');
 get_format 
------------
 %d.%m.%y
(1 row)
gaussdb=# SELECT get_format(date, 'usa');
 get_format 
------------
 %m.%d.%y
(1 row)
说明:
  1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  2. 在PREPARE语句中,get_format的第一个参数为关键字,不支持使用参数$1替代,例如:PREPARE p1 AS SELECT get_format($1, 'usa');

hour()

描述:输入一个时间类型,返回对应的时间的小时部分。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT HOUR('10:10:10.1');
 hour 
------
   10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

makedate(year,dayofyear)

描述:根据年份和天数值返回日期。

参数:

  • year:bigint。
  • dayofyear:bigint,该年的第若干天,允许跨年,小于等于0时返回null。

返回值类型:date

示例:

gaussdb=# SELECT makedate(2000, 60);
  makedate  
------------
 2000-02-29
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

microsecond()

描述:输入一个时间类型,返回对应的时间的微秒部分。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT MICROSECOND('2023-5-5 10:10:10.24485');
 microsecond 
-------------
      244850
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

minute()

描述:输入一个时间类型,返回对应的时间的分钟部分。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT MINUTE(time'10:10:10');
 minute 
--------
     10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

month()

描述:返回从过去日期开始的月份。

参数:入参为指定提取的日期时间,是时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:int

示例:

gaussdb=# SELECT month('2021-11-30');
 month 
-------
    11
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

monthname()

描述:返回日期的月份全名。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:text

示例:

gaussdb=# SELECT monthname('2023-02-28');
 monthname 
-----------
 February
(1 row)
说明:
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  • 返回值使用的语言由lc_time_names系统变量的值控制。

period_add(period, month_number)

描述:在指定时间段上加上指定的月数,将结果作为时间段返回。

参数:

  • period:bigint,使用YYYYMM或YYMM格式表示的日期。
  • month_number:bigint,需要加上的月数,允许为负数。

返回值类型:bigint,使用YYYYMM格式表示的日期。

示例:

gaussdb=# SELECT period_add(202205, -12);
 period_add 
------------
     202105
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

period_diff(p1,p2)

描述:计算两个时间段的月份差。

参数:参数类型为bigint,两个参数同时使用YYMM或YYYYMM格式来表示时间段。

返回值类型:bigint,月份差。

示例:

gaussdb=# SELECT period_diff('202101', '202102'); 
 period_diff 
-------------
          -1
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

second()

描述:输入一个时间类型,返回对应的时间的秒部分。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT SECOND('2023-5-5 10:10:10');
 second 
--------
     10
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

quarter()

描述:输入一个日期类型,返回对应的日期的季度部分。

参数:入参为指定提取的日期时间,是时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT QUARTER('2012-1-1');
 quarter 
---------
       1
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

str_to_date(str, format)

描述:将指定的字符串根据指定日期格式转为日期/时间。

参数:

  • str:text类型,需要格式化成日期的字符串;
  • format:text类型,格式化字符串。format参数列表如表12 format的取值及含义所示。
    表12 format的取值及含义

    format取值

    含义

    %a

    星期的缩写(Sun..Sat)。

    %b

    月份的缩写(Jan..Dec)。

    %c

    月份数字(0..12)。

    %D

    带有英语前缀的月份中的每天(0th, 1st, 2nd, 3rd, …)。

    %d

    月份中的每天的两位数字表示(00..31)。

    %e

    月份中的每天的数字表示(0..31)。

    %f

    微秒(000000..999999)。

    %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

    两位数字月份(00..12)。

    %p

    AM或者PM。

    %r

    十二小时制时间(hh:mm:ss后跟AM或PM)。

    %S

    秒(00..59)。

    %s

    秒(00..59)。

    %T

    二十四小时制时间(hh:mm:ss)。

    %U

    一年中的星期(00..53),每周的开始是星期天。

    %u

    一年中的星期(00..53),每周的开始是星期一。

    %V

    一年中的星期(01..53),每周的开始是星期天。

    %v

    一年中的星期(01..53),每周的开始是星期一。

    %W

    星期的名称(Sunday..Saturday)。

    %w

    星期中的每天(0=星期天..6=星期六)。

    %X

    一年中的星期,每周的开始是星期天,四位数字,用于%V。

    %x

    一年中的星期,每周的开始是星期一,四位数字,用于%v。

    %Y

    四位数字年份。

    %y

    两位数字年份。

返回值类型:text

示例:

gaussdb=# SELECT str_to_date('May 1, 2013','%M %d,%Y');-- 2013-05-01
 str_to_date 
-------------
 2013-05-01
(1 row)
说明:
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  • 只支持返回YYYY-MM-DD格式的时间。
  • 对于包含0年0月0日的时间或者只包含时分秒的时间,会报警并返回NULL。

subdate(expr, days)

描述:指定开始的日期时间和要从开始的日期时间减去的天数值,返回相减后的日期结果值。

参数:

  • expr:指定开始的日期时间,时间类型表达式,TEXT、DATE、DATETIME或TIME等类型。
  • days:需要减去的天数,int类型。

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。

示例:

gaussdb=# SELECT SUBDATE('2023-1-1', 20);
  subdate   
------------
 2022-12-12
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

subdate(expr,INTERVAL val unit)

描述:指定开始的日期时间和要从开始的日期时间减去的时间间隔,返回相减后的日期结果值。

参数:参数介绍如表13 参数说明所示。

表13 参数说明

参数

类型

描述

取值范围

expr

时间类型表达式、text、datetime、date或time等类型

指定开始的日期时间。

和类型范围一致。

val

整数、浮点数、字符串等类型

指定要减去的时间间隔。

和类型范围一致。

unit

关键字

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND等,具体请参见时间间隔表达式

返回值类型:TEXT、DATE、DATETIME或TIME WITHOUT TIMEZONE。

示例:

gaussdb=# SELECT SUBDATE('2018-05-01', INTERVAL 1 YEAR);
  subdate   
------------
 2017-05-01
(1 row)
说明:
  1. 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  2. 在PREPARE语句中,subdate的第二个参数为interval表达式,当使用参数$1完全替代时,会导致结果非预期,例如:PREPARE p1 AS SELECT subdate('2023-01-01 10:00:00', $1); EXECUTE p1(interval 13 hour);该用例返回非预期结果为'2023-01-01 10:00:00'。

subtime(expr1,expr2)

描述:返回时间或时间日期表达式expr1与时间表达式expr2的差值。

参数:

  • expr1为TIMESTAMP WITHOUT TIME ZONE/TIME类型的表达式,expr2为TIME表达式。
  • 返回值类型与expr1类型有关,两入参存在TEXT类型则返回TEXT,解析为TIMESTAMP WITHOUT TIME ZONE则返回TIMESTAMP WITHOUT TIME ZONE,解析为TIME则返回TIME。

返回值类型:TEXT、TIMESTAMP WITHOUT TIME ZONE或TIME

示例:

gaussdb=# SELECT subtime('2000-03-01 20:59:59', '22:58');
       subtime       
---------------------
 2000-02-29 22:01:59
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

addtime(expr1,expr2)

描述:返回时间或时间日期表达式expr1与时间表达式expr2相加后的值,返回值的格式与expr1保持一致。

参数:

  • expr1为timestamp without time zone/time类型的表达式,expr2为time表达式。
  • 返回值类型与expr1类型有关,解析为timestamp without time zone则返回timestamp without time zone,解析为time则返回time。

返回值类型:text、timestamp without time zone或time

示例:

gaussdb=# SELECT addtime('2000-03-01 20:59:59', '00:00:01');
       addtime       
---------------------
 2000-03-01 21:00:00
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

time_format(time, format)

描述:根据格式说明符format格式化time入参。

参数:

  • time为时间类型表达式、text、datetime、date或time等类型。
  • format为text类型,支持格式如表14 format的取值及含义所示。
    表14 format的取值及含义

    format取值

    含义

    %f

    微秒(000000至999999)。

    %H

    小时(00到23)。

    %h、%I

    小时(00到12)。

    %l

    小时(0到12)。

    %k

    小时(0到838)。

    %i

    分钟(00至59)。

    %p

    AM or PM。

    %r

    时间为12小时AM或PM格式(hh:mm:ss AM / PM)。

    %S、%s

    秒(00到59)。

    %T

    24小时格式的时间(hh:mm:ss)。

    %a、%b、%D、%j、%M、%U、%u、%V、%v、%W、%w、%X、%x

    NULL。

    %c、%e

    0。

    %d、%m、%y

    00。

    %Y

    0000。

    %其他字符/其他字符,如%A/A

    返回字符本身,如A。

    %单个字符+字符串s

    解析(%单个字符),拼接s。

返回值类型:text

示例:

gaussdb=# SELECT TIME_FORMAT('25:30:30', '%T|%r|%H|%h|%I|%i|%S|%f|%p|%k');
                   time_format                    
--------------------------------------------------
 25:30:30|01:30:30 AM|25|01|01|30|30|000000|AM|25
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

time_to_sec()

描述:将time入参转化为秒数。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。时间表达式按照TIME来解析。

返回值类型:int

示例:

gaussdb=# SELECT time_to_sec('00:00:01');
 time_to_sec 
-------------
           1
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

timediff()

描述:计算两个时间之间的差值,并返回一个时间间隔。

参数:有两个参数,为时间类型表达式、text、datetime、date或time等类型。

返回值类型:TIME WITHOUT TIMEZONE

示例:

gaussdb=# SELECT timediff(date'2022-12-30',20221229);
 timediff 
----------
 24:00:00
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

timestampadd(unit,interval,datetime_expr)

描述:返回一个新的时间戳,该时间戳是通过将unit的多个interval添加到datetime_expr来计算的。

参数:参数介绍如表15 参数说明所示。

表15 参数说明

参数

类型

描述

取值范围

unit

关键字

时间间隔单位。

YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND、Y、MM(月)、D、H、M(分钟)、S、US、YRS、QTR、MON、HRS、MIN、YEARS、WEEKS或HOURS等。

interval

numeric

时间间隔数值。

和类型范围一致。

datetime_expr

时间类型表达式、text、datetime、date或time等类型

需要变更的时间日期。若为text类型则返回text,为time则返回time,其他情况返回datetime。

和类型范围一致。

返回值类型:DATETIME、TEXT、TIME WITHOUT TIMEZONE

示例:

gaussdb=# SELECT TIMESTAMPADD(DAY,-2,'2022-07-27');
 timestampadd 
--------------
 2022-07-25
(1 row)
说明:
  • 该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。
  • timestampadd实际注册的函数为timestamp_add,可以用“\df timestamp_add”等指令查询函数详细入参与返回值。
  • 在PREPARE语句中,timestampadd的第一个参数为关键字,不支持使用参数$1替代,例如:PREPARE p1 AS SELECT timestampadd($1, -2, '2023-01-01');

to_days()

描述:返回指定日期自0000年1月1日以来的天数。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。时间表达式按照DATE来解析。

返回值类型:bigint

示例:

gaussdb=# SELECT to_days('2000-1-1');
 to_days 
---------
  730485
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

to_seconds()

描述:返回入参自公元0年以来的秒数。

参数:入参为时间类型表达式、TEXT、DATETIME、DATE或TIME等类型。时间表达式按照datetime来解析。

返回值类型:bigint

示例:

gaussdb=# SELECT TO_SECONDS('2009-11-29 13:43:32');
 to_seconds  
-------------
 63426721412
(1 row)
说明:

该函数在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时有效。

unix_timestamp([date])

描述:返回一个UNIX时间戳,表示自“1970-01-01 08:00”UTC以来的秒数。若无入参,则默认值为调用函数时的datetime时间戳。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:numeric

示例:

gaussdb=# SELECT UNIX_TIMESTAMP('2022-12-22');
 unix_timestamp 
----------------
     1671638400
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

utc_date()

描述:将函数执行时的当前UTC日期作为“YYYY-MM-DD”格式的值返回。

返回值类型:date

示例:

gaussdb=# SELECT utc_date();
  utc_date  
------------
 2023-08-10
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

utc_time()

描述:将函数执行时的当前UTC时间作为“HH:MM:SS”格式的值返回。

参数:表示时间精度,int类型,范围为[0,6],缺省时默认值为0。

返回值类型:time without time zone

示例:

gaussdb=# SELECT utc_time();
 utc_time
----------
 11:47:53
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

utc_timestamp()

描述:将函数执行时的当前UTC时间戳作为“YYYY-MM-DD HH:MM:SS”格式的值返回。

参数:表示时间精度,int类型,范围为[0,6],缺省时默认值为0。

返回值类型:timestamp without time zone

示例:

gaussdb=# SELECT utc_timestamp();
    utc_timestamp
---------------------
 2023-08-21 11:51:19
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

week(date[, mode])

描述:返回日期所在的周数。

参数:

  • 参数date:指定日期时间,时间类型表达式、text、datetime、date或time等类型。
  • 可选参数mode的含义如表16 mode说明所示,缺省时则为0。
    表16 mode说明

    mode

    一周的第一天

    范围

    哪一周是第一周

    0

    周日

    0~53

    今年有周日的周。

    1

    周一

    0~53

    今年有4天及以上的周。

    2

    周日

    1~53

    今年有周日的周。

    3

    周一

    1~53

    今年有4天及以上的周。

    4

    周日

    0~53

    今年有4天及以上的周。

    5

    周一

    0~53

    今年有周一的周。

    6

    周日

    1~53

    今年有4天及以上的周。

    7

    周一

    1~53

    今年有周一的周。

返回值类型:bigint

示例:

gaussdb=# SELECT week(date'2000-01-01', 1);
 week 
------
    0
(1 row)

gaussdb=# SELECT week('2000-01-01', 2);
 week 
------
   52
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

weekday()

描述:返回一个日期的工作日索引值,即星期一为0,星期二为1,星期三为2,星期四为3,星期五为4,星期六为5,星期日为6。

参数:时间类型表达式、text、datetime、date或time等类型。

返回值类型:bigint

示例:

gaussdb=# SELECT weekday('1970-01-01 12:00:00');
 weekday 
---------
       3
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

weekofyear(date)

描述:返回日期时间的日历周,范围1~53。等同于week(date, 3)。

参数:

  • date:指定日期时间,时间类型表达式、text、datetime、date或time等类型。
  • 函数等同于week(date, 3),具体请参见week(date[, mode])

返回值类型:bigint

示例:

gaussdb=# SELECT weekofyear('1970-05-22');
 weekofyear 
------------
         21
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

year()

描述:提取日期时间的年份部分,将结果返回。

参数:入参为指定提取的日期时间,是时间类型表达式、text、datetime、date或time等类型。

返回值类型:int

示例:

gaussdb=# SELECT year('23-05-22');
 year 
------
 2023
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

yearweek(date[, mode])

描述:返回日期的年份和周数。

参数:

  • 参数date:指定日期时间。
  • date可取的类型:DATE、DATETIME、TIMESTAMP、TIME、TEXT、NUMERIC等。
  • 可选参数mode的含义如表17 mode说明所示,缺省时则为0。
    表17 mode说明

    mode

    一周的第一天

    范围

    哪一周是第一周

    0

    周日

    0~53

    今年有周日的周。

    1

    周一

    0~53

    今年有4天及以上的周。

    2

    周日

    1~53

    今年有周日的周。

    3

    周一

    1~53

    今年有4天及以上的周。

    4

    周日

    0~53

    今年有4天及以上的周。

    5

    周一

    0~53

    今年有周一的周。

    6

    周日

    1~53

    今年有4天及以上的周。

    7

    周一

    1~53

    今年有周一的周。

返回值类型:bigint

示例:

gaussdb=# SELECT yearweek(datetime'2000-01-01', 3);
 yearweek 
----------
   199952
(1 row)
说明:

该函数仅在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7和b_format_dev_version值为s1时有效。

表18 用于日期/时间截断的模式显示了可以用于截断日期和时间值的模板。

表18 用于日期/时间截断的模式

类别

模式

描述

微秒

MICROSECON

截断日期/时间,精确到微秒(000000 - 999999)

US

USEC

USECOND

毫秒

MILLISECON

截断日期/时间,精确到毫秒(000 - 999)

MS

MSEC

MSECOND

S

截断日期/时间,精确到秒(00 - 59)

SEC

SECOND

分钟

M

截断日期/时间,精确到分钟(00 - 59)

MI

MIN

MINUTE

小时

H

截断日期/时间,精确到小时(00 - 23)

HH

HOUR

HR

D

截断日期/时间,精确到天(01-01 - 12-31)

DAY

DD

DDD

J

W

截断日期/时间,精确到周(本周的第一天)

WEEK

MM

截断日期/时间,精确到月(本月的第一天)

MON

MONTH

季度

Q

截断日期/时间,精确到季度(本季度的第一天)

QTR

QUARTER

Y

截断日期/时间,精确到年(本年的第一天)

YEAR

YR

YYYY

十年

DEC

截断日期/时间,精确到十年(本十年的第一天)

DECADE

世纪

C

截断日期/时间,精确到世纪(本世纪的第一天)

CC

CENT

CENTURY

千年

MIL

截断日期/时间,精确到千年(本千年的第一天)

MILLENNIA

MILLENNIUM

表19 用于时间截断和时间四舍五入的参数

类别

模式

描述

分钟

M

截断或四舍五入日期/时间,精确到分钟(00 - 59)

MI

MIN

MINUTE

小时

H

截断或四舍五入日期/时间,精确到小时(00 - 23)

HH

HOUR

HR

HH12

HH24

DD

截断或四舍五入日期/时间,精确到天(01-01 - 12-31)

DDD

J

ISO周

IW

截断或四舍五入日期/时间,精确到周(本周的第一天,第一天为周一)

DAY

截断或四舍五入日期/时间,精确到周(本周的第一天,第一天为周日)

DY

D

月周

W

截断或四舍五入日期/时间,精确到周(本周的第一天,第一天为本月第一天的周数)

年周

WW

截断或四舍五入日期/时间,精确到周(本周的第一天,第一天为本年第一天的周数)

MM

截断或四舍五入日期/时间,精确到月(本月的第一天)

MON

MONTH

RM

季度

Q

截断或四舍五入日期/时间,精确到季度(本季度的第一天)

QTR

QUARTER

Y

截断或四舍五入日期/时间,精确到年(本年的第一天)

YEAR

YR

YYYY

SYYYY

YYY

YY

SYEAR

十年

DEC

截断或四舍五入日期/时间,精确到十年(本十年的第一天)

DECADE

世纪

C

截断或四舍五入日期/时间,精确到世纪(本世纪的第一天)

CC

CENT

CENTURY

SCC

千年

MIL

截断或四舍五入日期/时间,精确到千年(本千年的第一天)

MILLENNIA

MILLENNIUM

说明:

表19 用于时间截断和时间四舍五入的参数中行为仅在ORA兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。

timestamp_diff(text, timestamp, timestamp)

描述:计算两个日期时间之间的差值,截取到参数text指定的精度。

返回值类型:bigint

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
gaussdb=# SELECT timestamp_diff('year','2018-01-01','2020-04-01');
 timestamp_diff 
----------------
              2
(1 row)
gaussdb=# SELECT timestamp_diff('month','2018-01-01','2020-04-01');
 timestamp_diff 
----------------
             27
(1 row)
gaussdb=# SELECT timestamp_diff('quarter','2018-01-01','2020-04-01');
 timestamp_diff 
----------------
              9
(1 row)
gaussdb=# SELECT timestamp_diff('week','2018-01-01','2020-04-01');
 timestamp_diff 
----------------
            117
(1 row)
gaussdb=# SELECT timestamp_diff('day','2018-01-01','2020-04-01');
 timestamp_diff 
----------------
            821
(1 row)
gaussdb=# SELECT timestamp_diff('hour','2018-01-01 10:10:10','2018-01-01 12:12:12');
 timestamp_diff 
----------------
              2
(1 row)
gaussdb=# SELECT timestamp_diff('minute','2018-01-01 10:10:10','2018-01-01 12:12:12');
 timestamp_diff 
----------------
            122
(1 row)
gaussdb=# SELECT timestamp_diff('second','2018-01-01 10:10:10','2018-01-01 10:12:12');
 timestamp_diff 
----------------
            122
(1 row)
gaussdb=# SELECT timestamp_diff('microsecond','2018-01-01 10:10:10','2018-01-01 10:12:12');
 timestamp_diff 
----------------
      122000000
(1 row)
提示

您即将访问非华为云网站,请注意账号财产安全

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容