- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
日期/时间和间隔函数和运算符
编辑日期/时间和间隔函数和运算符
编辑Elasticsearch SQL 提供了多种用于执行日期/时间操作的功能。
间隔
编辑在处理日期/时间时,一个常见的需求是围绕 interval
的概念,这是一个值得在 Elasticsearch 和 Elasticsearch SQL 中探讨的主题。
Elasticsearch 对 日期数学 提供了全面的支持,无论是在 索引名称 还是 查询 中。在 Elasticsearch SQL 内部,前者通过在表名中传递表达式来直接支持,而后者则通过标准的 SQL INTERVAL
来支持。
下表显示了 Elasticsearch 和 Elasticsearch SQL 之间的映射关系
Elasticsearch |
Elasticsearch SQL |
索引/表日期时间数学 |
|
|
|
查询日期/时间数学 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INTERVAL
允许将 YEAR
和 MONTH
混合在一起或 将 DAY
、HOUR
、MINUTE
和 SECOND
混合在一起。
Elasticsearch SQL 也接受每个时间单位的复数形式(例如,YEAR
和 YEARS
都是有效的)。
以下是可能的组合示例
间隔 |
描述 |
|
1 年 2 个月 |
|
3 天 4 小时 |
|
5 天、6 小时和 12 分钟 |
|
3 天、4 小时、56 分钟和 1 秒 |
|
2 天、3 小时、45 分钟、1 秒和 234567890 纳秒 |
|
123 小时 45 分钟 |
|
65 小时、43 分钟、21 秒和 12300000 纳秒 |
|
45 分钟、1 秒和 230000000 纳秒 |
比较
编辑日期/时间字段可以与 日期数学 表达式使用等于 (=
) 和 IN
运算符进行比较
SELECT hire_date FROM emp WHERE hire_date = '1987-03-01||+4y/y'; hire_date ------------------------ 1991-01-26T00:00:00.000Z 1991-10-22T00:00:00.000Z 1991-09-01T00:00:00.000Z 1991-06-26T00:00:00.000Z 1991-08-30T00:00:00.000Z 1991-12-01T00:00:00.000Z
SELECT hire_date FROM emp WHERE hire_date IN ('1987-03-01||+2y/M', '1987-03-01||+3y/M'); hire_date ------------------------ 1989-03-31T00:00:00.000Z 1990-03-02T00:00:00.000Z
运算符
编辑基本算术运算符(+
、-
、*
)支持如下所示的日期/时间参数
SELECT INTERVAL 1 DAY + INTERVAL 53 MINUTES AS result; result --------------- +1 00:53:00
SELECT CAST('1969-05-13T12:34:56' AS DATETIME) + INTERVAL 49 YEARS AS result; result -------------------- 2018-05-13T12:34:56Z
SELECT - INTERVAL '49-1' YEAR TO MONTH result; result --------------- -49-1
SELECT INTERVAL '1' DAY - INTERVAL '2' HOURS AS result; result --------------- +0 22:00:00
SELECT CAST('2018-05-13T12:34:56' AS DATETIME) - INTERVAL '2-8' YEAR TO MONTH AS result; result -------------------- 2015-09-13T12:34:56Z
SELECT -2 * INTERVAL '3' YEARS AS result; result --------------- -6-0
函数
编辑针对日期/时间的函数。
CURRENT_DATE/CURDATE
编辑概要
CURRENT_DATE CURRENT_DATE() CURDATE()
输入:无
输出:日期
描述:返回当前查询到达服务器时的日期(无时间部分)。它既可以用作关键字:CURRENT_DATE
,也可以用作不带参数的函数:CURRENT_DATE()
。
与 CURRENT_DATE 不同,CURDATE()
只能用作不带参数的函数,而不能用作关键字。
此方法在同一查询中的每次出现都返回相同的值。
SELECT CURRENT_DATE AS result; result ------------------------ 2018-12-12
SELECT CURRENT_DATE() AS result; result ------------------------ 2018-12-12
SELECT CURDATE() AS result; result ------------------------ 2018-12-12
通常,此函数(及其同类 TODAY() 函数)用于相对日期过滤
SELECT first_name FROM emp WHERE hire_date > TODAY() - INTERVAL 35 YEARS ORDER BY first_name ASC LIMIT 5; first_name ------------ Alejandro Amabile Anoosh Basil Bojan
CURRENT_TIME/CURTIME
编辑概要
输入:
输出:时间
描述:返回当前查询到达服务器时的时间。作为函数,CURRENT_TIME()
接受 *precision* 作为可选参数,用于舍入秒的小数位数(纳秒)。默认的 *precision* 为 3,这意味着将返回毫秒精度的当前时间。
此方法在同一查询中的每次出现都返回相同的值。
SELECT CURRENT_TIME AS result; result ------------------------ 12:31:27.237Z
SELECT CURRENT_TIME() AS result; result ------------------------ 12:31:27.237Z
SELECT CURTIME() AS result; result ------------------------ 12:31:27.237Z
SELECT CURRENT_TIME(1) AS result; result ------------------------ 12:31:27.2Z
通常,此函数用于相对日期/时间过滤
SELECT first_name FROM emp WHERE CAST(hire_date AS TIME) > CURRENT_TIME() - INTERVAL 20 MINUTES ORDER BY first_name ASC LIMIT 5; first_name --------------- Alejandro Amabile Anneke Anoosh Arumugam
目前,使用大于 6 的 *precision* 对函数的输出没有任何影响,因为返回的最大秒的小数位数是 6。
CURRENT_TIMESTAMP
编辑概要
输入:
输出:日期/时间
描述:返回当前查询到达服务器时的日期/时间。作为函数,CURRENT_TIMESTAMP()
接受 *precision* 作为可选参数,用于舍入秒的小数位数(纳秒)。默认的 *precision* 为 3,这意味着将返回毫秒精度的当前日期/时间。
此方法在同一查询中的每次出现都返回相同的值。
SELECT CURRENT_TIMESTAMP AS result; result ------------------------ 2018-12-12T14:48:52.448Z
SELECT CURRENT_TIMESTAMP() AS result; result ------------------------ 2018-12-12T14:48:52.448Z
SELECT CURRENT_TIMESTAMP(1) AS result; result ------------------------ 2018-12-12T14:48:52.4Z
通常,此函数(及其同类 NOW() 函数)用于相对日期/时间过滤
SELECT first_name FROM emp WHERE hire_date > NOW() - INTERVAL 100 YEARS ORDER BY first_name ASC LIMIT 5; first_name --------------- Alejandro Amabile Anneke Anoosh Arumugam
目前,使用大于 6 的 *precision* 对函数的输出没有任何影响,因为返回的最大秒的小数位数是 6。
DATE_ADD/DATEADD/TIMESTAMP_ADD/TIMESTAMPADD
编辑概要
输入:
表示要添加到日期/时间的日期/时间单位的字符串表达式。如果 |
|
表示上述单位应添加到/从日期/时间中添加/减去的次数的整数表达式,如果使用负值,则结果是从日期/时间中减去。如果 |
|
日期/时间表达式。如果 |
输出:日期时间
描述:将给定的日期/时间单位数添加到日期/时间。如果单位数是负数,则从日期/时间中减去。
如果第二个参数是 long 类型,则可能发生截断,因为将从该 long 类型中提取并使用一个整数值。
要添加/减去的日期时间单位 | |
---|---|
单位 |
缩写 |
年 |
年,yy,yyyy |
季度 |
季度,qq,q |
月 |
月,mm,m |
年中的天 |
dy,y |
天 |
天,dd,d |
周 |
周,wk,ww |
工作日 |
工作日,dw |
小时 |
小时,hh |
分钟 |
分钟,mi,n |
秒 |
秒,ss,s |
毫秒 |
毫秒,ms |
微秒 |
微秒,mcs |
纳秒 |
纳秒,ns |
SELECT DATE_ADD('years', 10, '2019-09-04T11:22:33.000Z'::datetime) AS "+10 years"; +10 years ------------------------ 2029-09-04T11:22:33.000Z
SELECT DATE_ADD('week', 10, '2019-09-04T11:22:33.000Z'::datetime) AS "+10 weeks"; +10 weeks ------------------------ 2019-11-13T11:22:33.000Z
SELECT DATE_ADD('seconds', -1234, '2019-09-04T11:22:33.000Z'::datetime) AS "-1234 seconds"; -1234 seconds ------------------------ 2019-09-04T11:01:59.000Z
SELECT DATE_ADD('qq', -417, '2019-09-04'::date) AS "-417 quarters"; -417 quarters ------------------------ 1915-06-04T00:00:00.000Z
SELECT DATE_ADD('minutes', 9235, '2019-09-04'::date) AS "+9235 minutes"; +9235 minutes ------------------------ 2019-09-10T09:55:00.000Z
DATE_DIFF/DATEDIFF/TIMESTAMP_DIFF/TIMESTAMPDIFF
编辑概要
输入:
表示以下两个日期/时间表达式之间的日期/时间单位差值的字符串表达式。如果 |
|
开始日期/时间表达式。如果 |
|
结束日期/时间表达式。如果 |
输出:整数
描述:从第三个参数中减去第二个参数,并以第一个参数中指定的单位的倍数返回它们的差值。如果第二个参数(开始)大于第三个参数(结束),则返回负值。
日期时间差单位 | |
---|---|
单位 |
缩写 |
年 |
年,yy,yyyy |
季度 |
季度,qq,q |
月 |
月,mm,m |
年中的天 |
dy,y |
天 |
天,dd,d |
周 |
周,wk,ww |
工作日 |
工作日,dw |
小时 |
小时,hh |
分钟 |
分钟,mi,n |
秒 |
秒,ss,s |
毫秒 |
毫秒,ms |
微秒 |
微秒,mcs |
纳秒 |
纳秒,ns |
SELECT DATE_DIFF('years', '2019-09-04T11:22:33.000Z'::datetime, '2032-09-04T22:33:11.000Z'::datetime) AS "diffInYears"; diffInYears ------------------------ 13
SELECT DATE_DIFF('week', '2019-09-04T11:22:33.000Z'::datetime, '2016-12-08T22:33:11.000Z'::datetime) AS "diffInWeeks"; diffInWeeks ------------------------ -143
SELECT DATE_DIFF('seconds', '2019-09-04T11:22:33.123Z'::datetime, '2019-07-12T22:33:11.321Z'::datetime) AS "diffInSeconds"; diffInSeconds ------------------------ -4625362
SELECT DATE_DIFF('qq', '2019-09-04'::date, '2025-04-25'::date) AS "diffInQuarters"; diffInQuarters ------------------------ 23
对于 hour
和 minute
,DATEDIFF
不进行任何舍入,而是首先将两个日期上更详细的时间字段截断为零,然后计算减法。
SELECT DATEDIFF('hours', '2019-11-10T12:10:00.000Z'::datetime, '2019-11-10T23:59:59.999Z'::datetime) AS "diffInHours"; diffInHours ------------------------ 11
SELECT DATEDIFF('minute', '2019-11-10T12:10:00.000Z'::datetime, '2019-11-10T12:15:59.999Z'::datetime) AS "diffInMinutes"; diffInMinutes ------------------------ 5
SELECT DATE_DIFF('minutes', '2019-09-04'::date, '2015-08-17T22:33:11.567Z'::datetime) AS "diffInMinutes"; diffInMinutes ------------------------ -2128407
DATE_FORMAT
编辑概要
输入:
输出:字符串
描述:使用第二个参数中指定的格式将日期/时间/时间作为字符串返回。格式化模式是 MySQL DATE_FORMAT() 函数 中使用的说明符之一。
如果第一个参数的类型为 time
,则第二个参数指定的模式不能包含日期相关的单位(例如 *dd*、*MM*、*yyyy* 等)。如果它包含此类单位,则会返回错误。月份和日期说明符(%c、%D、%d、%e、%m)的范围从 1 开始,这与 MySQL 中从 0 开始不同,因为 MySQL 允许存储不完整的日期,例如 *2014-00-00*。在这种情况下,Elasticsearch 返回一个错误。
SELECT DATE_FORMAT(CAST('2020-04-05' AS DATE), '%d/%m/%Y') AS "date"; date ------------------ 05/04/2020
SELECT DATE_FORMAT(CAST('2020-04-05T11:22:33.987654' AS DATETIME), '%d/%m/%Y %H:%i:%s.%f') AS "datetime"; datetime ------------------ 05/04/2020 11:22:33.987654
SELECT DATE_FORMAT(CAST('23:22:33.987' AS TIME), '%H %i %s.%f') AS "time"; time ------------------ 23 22 33.987000
DATE_PARSE
编辑概要
输入:
输出:日期
描述:通过使用第二个参数中指定的格式解析第一个参数来返回日期。使用的解析格式模式来自 java.time.format.DateTimeFormatter
。
如果解析模式不包含所有有效的日期单位(例如 *HH:mm:ss*、*dd-MM HH:mm:ss* 等),则会返回错误,因为该函数需要返回一个 date
类型的值,该值将包含日期部分。
SELECT DATE_PARSE('07/04/2020', 'dd/MM/yyyy') AS "date"; date ----------- 2020-04-07
DATETIME_FORMAT
编辑概要
输入:
输出:字符串
描述:使用第二个参数中指定的格式,将日期/日期时间/时间返回为字符串。使用的格式化模式来自 java.time.format.DateTimeFormatter
。
如果第一个参数的类型是 time
,则第二个参数指定的模式不能包含与日期相关的单位(例如,dd、MM、yyyy 等)。如果它包含此类单位,则会返回错误。
SELECT DATETIME_FORMAT(CAST('2020-04-05' AS DATE), 'dd/MM/yyyy') AS "date"; date ------------------ 05/04/2020
SELECT DATETIME_FORMAT(CAST('2020-04-05T11:22:33.987654' AS DATETIME), 'dd/MM/yyyy HH:mm:ss.SS') AS "datetime"; datetime ------------------ 05/04/2020 11:22:33.98
SELECT DATETIME_FORMAT(CAST('11:22:33.987' AS TIME), 'HH mm ss.S') AS "time"; time ------------------ 11 22 33.9
DATETIME_PARSE
编辑概要
输入:
输出:日期时间
描述:通过使用第二个参数中指定的格式解析第一个参数,返回一个日期时间。使用的解析格式模式来自 java.time.format.DateTimeFormatter
。
如果解析模式仅包含日期或仅包含时间单位(例如,dd/MM/yyyy、HH:mm:ss 等),则会返回错误,因为该函数需要返回一个 datetime
类型的值,该值必须同时包含两者。
SELECT DATETIME_PARSE('07/04/2020 10:20:30.123', 'dd/MM/yyyy HH:mm:ss.SSS') AS "datetime"; datetime ------------------------ 2020-04-07T10:20:30.123Z
SELECT DATETIME_PARSE('10:20:30 07/04/2020 Europe/Berlin', 'HH:mm:ss dd/MM/yyyy VV') AS "datetime"; datetime ------------------------ 2020-04-07T08:20:30.000Z
TIME_PARSE
编辑概要
输入:
输出:时间
描述:通过使用第二个参数中指定的格式解析第一个参数,返回一个时间。使用的解析格式模式来自 java.time.format.DateTimeFormatter
。
如果解析模式仅包含日期单位(例如,dd/MM/yyyy),则会返回错误,因为该函数需要返回一个 time
类型的值,该值将仅包含时间。
SELECT TIME_PARSE('10:20:30.123', 'HH:mm:ss.SSS') AS "time"; time --------------- 10:20:30.123Z
SELECT TIME_PARSE('10:20:30-01:00', 'HH:mm:ssXXX') AS "time"; time --------------- 11:20:30.000Z
DATE_PART/DATEPART
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取指定的单位。它类似于 EXTRACT
,但单位的名称和别名不同,并提供了更多选项(例如:TZOFFSET
)。
要提取的日期时间单位 | |
---|---|
单位 |
缩写 |
年 |
年,yy,yyyy |
季度 |
季度,qq,q |
月 |
月,mm,m |
年中的天 |
dy,y |
天 |
天,dd,d |
周 |
周,wk,ww |
工作日 |
工作日,dw |
小时 |
小时,hh |
分钟 |
分钟,mi,n |
秒 |
秒,ss,s |
毫秒 |
毫秒,ms |
微秒 |
微秒,mcs |
纳秒 |
纳秒,ns |
tzoffset |
tz |
SELECT DATE_PART('year', '2019-09-22T11:22:33.123Z'::datetime) AS "years"; years ---------- 2019
SELECT DATE_PART('mi', '2019-09-04T11:22:33.123Z'::datetime) AS mins; mins ----------- 22
SELECT DATE_PART('quarters', CAST('2019-09-24' AS DATE)) AS quarter; quarter ------------- 3
SELECT DATE_PART('month', CAST('2019-09-24' AS DATE)) AS month; month ------------- 9
对于 week
和 weekday
,该单位是使用非 ISO 计算提取的,这意味着给定的周被认为是从星期日开始,而不是星期一。
SELECT DATE_PART('week', '2019-09-22T11:22:33.123Z'::datetime) AS week; week ---------- 39
tzoffset
返回表示时区偏移量的总分钟数(有符号)。
SELECT DATE_PART('tzoffset', '2019-09-04T11:22:33.123+05:15'::datetime) AS tz_mins; tz_mins -------------- 315
SELECT DATE_PART('tzoffset', '2019-09-04T11:22:33.123-03:49'::datetime) AS tz_mins; tz_mins -------------- -229
DATE_TRUNC/DATETRUNC
编辑概要
输入:
输出:日期时间/间隔
描述:通过将所有重要性低于指定字段的字段设置为零(对于星期、星期几和月份,则设置为 1),将日期/日期时间/间隔截断为指定单位。如果第一个参数是 week
,而第二个参数的类型是 interval
,则会抛出错误,因为 interval
数据类型不支持 week
时间单位。
日期时间截断单位 | |
---|---|
单位 |
缩写 |
millennium |
millennia |
century |
centuries |
decade |
decades |
年 |
年,yy,yyyy |
季度 |
季度,qq,q |
月 |
月,mm,m |
周 |
周,wk,ww |
天 |
天,dd,d |
小时 |
小时,hh |
分钟 |
分钟,mi,n |
秒 |
秒,ss,s |
毫秒 |
毫秒,ms |
微秒 |
微秒,mcs |
纳秒 |
纳秒,ns |
SELECT DATE_TRUNC('millennium', '2019-09-04T11:22:33.123Z'::datetime) AS millennium; millennium ------------------------ 2000-01-01T00:00:00.000Z
SELECT DATETRUNC('week', '2019-08-24T11:22:33.123Z'::datetime) AS week; week ------------------------ 2019-08-19T00:00:00.000Z
SELECT DATE_TRUNC('mi', '2019-09-04T11:22:33.123Z'::datetime) AS mins; mins ------------------------ 2019-09-04T11:22:00.000Z
SELECT DATE_TRUNC('decade', CAST('2019-09-04' AS DATE)) AS decades; decades ------------------------ 2010-01-01T00:00:00.000Z
SELECT DATETRUNC('quarters', CAST('2019-09-04' AS DATE)) AS quarter; quarter ------------------------ 2019-07-01T00:00:00.000Z
SELECT DATE_TRUNC('centuries', INTERVAL '199-5' YEAR TO MONTH) AS centuries; centuries ------------------ +100-0
SELECT DATE_TRUNC('hours', INTERVAL '17 22:13:12' DAY TO SECONDS) AS hour; hour ------------------ +17 22:00:00
SELECT DATE_TRUNC('days', INTERVAL '19 15:24:19' DAY TO SECONDS) AS day; day ------------------ +19 00:00:00
FORMAT
编辑概要
输入:
输出:字符串
描述:使用第二个参数中指定的 格式,将日期/日期时间/时间返回为字符串。使用的格式化模式来自 Microsoft SQL Server 格式规范。
如果第一个参数的类型是 time
,则第二个参数指定的模式不能包含与日期相关的单位(例如,dd、MM、yyyy 等)。如果它包含此类单位,则会返回错误。
格式说明符 F
的工作方式类似于格式说明符 f
。它将返回秒的小数部分,并且数字位数将与作为输入提供的 F
的数量相同(最多 9 位)。结果将包含附加在末尾的 0
,以与提供的 F
的数量匹配。例如:对于时间部分 10:20:30.1234
和模式 HH:mm:ss.FFFFFF
,该函数的输出字符串将为:10:20:30.123400
。
格式说明符 y
将返回纪元年份,而不是一位/两位低位数字。例如:对于年份 2009
,y
将返回 2009
而不是 9
。对于年份 43
,y
格式说明符将返回 43
。- 诸如 "
、\
和 %
之类的特殊字符将按原样返回,而不会进行任何更改。例如:使用 %M
格式化日期 17-sep-2020
将返回 %9
。
SELECT FORMAT(CAST('2020-04-05' AS DATE), 'dd/MM/yyyy') AS "date"; date ------------------ 05/04/2020
SELECT FORMAT(CAST('2020-04-05T11:22:33.987654' AS DATETIME), 'dd/MM/yyyy HH:mm:ss.ff') AS "datetime"; datetime ------------------ 05/04/2020 11:22:33.98
SELECT FORMAT(CAST('11:22:33.987' AS TIME), 'HH mm ss.f') AS "time"; time ------------------ 11 22 33.9
TO_CHAR
编辑概要
输入:
输出:字符串
描述:使用第二个参数中指定的格式,将日期/日期时间/时间返回为字符串。格式化模式符合 用于日期/时间格式化的 PostgreSQL 模板模式。
如果第一个参数的类型是 time
,则第二个参数指定的模式不能包含与日期相关的单位(例如,dd、MM、YYYY 等)。如果它包含此类单位,则会返回错误。
在某些情况下,TZ
和 tz
(时区缩写)模式的结果与 PostgreSQL 中 TO_CHAR
返回的结果不同。原因是 JDK 指定的时区缩写与 PostgreSQL 指定的时区缩写不同。此函数可能会显示实际的时区缩写,而不是 PostgreSQL 实现返回的通用 LMT
或空字符串或偏移量。两种实现之间的夏季/日光标记也可能不同(例如,对于夏威夷,将显示 HT
而不是 HST
)。
不支持 FX
、TM
、SP
模式修饰符,它们将在输出中显示为 FX
、TM
、SP
字面值。
SELECT TO_CHAR(CAST('2020-04-05' AS DATE), 'DD/MM/YYYY') AS "date"; date ------------------ 05/04/2020
SELECT TO_CHAR(CAST('2020-04-05T11:22:33.987654' AS DATETIME), 'DD/MM/YYYY HH24:MI:SS.FF2') AS "datetime"; datetime ------------------ 05/04/2020 11:22:33.98
SELECT TO_CHAR(CAST('23:22:33.987' AS TIME), 'HH12 MI SS.FF1') AS "time"; time ------------------ 11 22 33.9
DAY_OF_MONTH/DOM/DAY
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取月份中的某一天。
SELECT DAY_OF_MONTH(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS day; day --------------- 19
DAY_OF_WEEK/DAYOFWEEK/DOW
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取星期几。星期日是 1
,星期一是 2
,依此类推。
SELECT DAY_OF_WEEK(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS day; day --------------- 2
DAY_OF_YEAR/DOY
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取一年中的某一天。
SELECT DAY_OF_YEAR(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS day; day --------------- 50
DAY_NAME/DAYNAME
编辑概要
输入:
输出:字符串
描述:以文本格式(Monday
、Tuesday
…)从日期/日期时间中提取星期几。
SELECT DAY_NAME(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS day; day --------------- Monday
HOUR_OF_DAY/HOUR
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取一天中的小时。
SELECT HOUR_OF_DAY(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS hour; hour --------------- 10
ISO_DAY_OF_WEEK/ISODAYOFWEEK/ISODOW/IDOW
编辑概要
输入:
输出:整数
描述:按照 ISO 8601 标准,从日期/日期时间中提取星期几。星期一是 1
,星期二是 2
,依此类推。
SELECT ISO_DAY_OF_WEEK(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS day; day --------------- 1
ISO_WEEK_OF_YEAR/ISOWEEKOFYEAR/ISOWEEK/IWOY/IW
编辑概要
输入:
输出:整数
描述:按照 ISO 8601 标准,从日期/日期时间中提取一年中的周数。一年的第一周是其大部分(4 天或更多)在 1 月份的第一周。
SELECT ISO_WEEK_OF_YEAR(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS week; week --------------- 8
MINUTE_OF_DAY
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取一天中的分钟。
SELECT MINUTE_OF_DAY(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS minute; minute --------------- 623
MINUTE_OF_HOUR/MINUTE
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取小时中的分钟。
SELECT MINUTE_OF_HOUR(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS minute; minute --------------- 23
MONTH_OF_YEAR/MONTH
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取一年中的月份。
SELECT MONTH_OF_YEAR(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS month; month --------------- 2
MONTH_NAME/MONTHNAME
编辑概要
输入:
输出:字符串
描述:以文本格式(January
、February
…)从日期/日期时间中提取月份。
SELECT MONTH_NAME(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS month; month --------------- February
NOW
编辑概要
NOW()
输入:无
输出:日期时间
描述:此函数提供的功能与 CURRENT_TIMESTAMP() 函数相同:返回当前查询到达服务器时的日期时间。此方法对于同一查询中的每次出现始终返回相同的值。
SELECT NOW() AS result; result ------------------------ 2018-12-12T14:48:52.448Z
通常,此函数(及其孪生函数 CURRENT_TIMESTAMP())用于相对日期/时间筛选
SELECT first_name FROM emp WHERE hire_date > NOW() - INTERVAL 100 YEARS ORDER BY first_name ASC LIMIT 5; first_name --------------- Alejandro Amabile Anneke Anoosh Arumugam
SECOND_OF_MINUTE/SECOND
编辑概要
输入:
输出:整数
描述:从日期/日期时间中提取分钟中的秒。
SELECT SECOND_OF_MINUTE(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS second; second --------------- 27
QUARTER
编辑概要
输入:
输出:整数
描述: 提取日期/日期时间所属的年份季度。
SELECT QUARTER(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS quarter; quarter --------------- 1
TODAY
编辑概要
TODAY()
输入:无
输出:日期
描述: 此函数的功能与 CURRENT_DATE() 函数相同:返回当前查询到达服务器时的日期。此方法在同一查询中每次出现时始终返回相同的值。
SELECT TODAY() AS result; result ------------------------ 2018-12-12
通常,此函数(及其孪生函数 CURRENT_TIMESTAMP())用于相对日期过滤
SELECT first_name FROM emp WHERE hire_date > TODAY() - INTERVAL 35 YEARS ORDER BY first_name ASC LIMIT 5; first_name ------------ Alejandro Amabile Anoosh Basil Bojan
WEEK_OF_YEAR/WEEK
编辑概要
输入:
输出:整数
描述: 从日期/日期时间中提取年份中的周数。
SELECT WEEK(CAST('1988-01-05T09:22:10Z' AS TIMESTAMP)) AS week, ISOWEEK(CAST('1988-01-05T09:22:10Z' AS TIMESTAMP)) AS isoweek; week | isoweek ---------------+--------------- 2 |1
YEAR
编辑概要
输入:
输出:整数
描述: 从日期/日期时间中提取年份。
SELECT YEAR(CAST('2018-02-19T10:23:27Z' AS TIMESTAMP)) AS year; year --------------- 2018
On this page
- 间隔
- 比较
- 运算符
- 函数
CURRENT_DATE/CURDATE
CURRENT_TIME/CURTIME
CURRENT_TIMESTAMP
DATE_ADD/DATEADD/TIMESTAMP_ADD/TIMESTAMPADD
DATE_DIFF/DATEDIFF/TIMESTAMP_DIFF/TIMESTAMPDIFF
DATE_FORMAT
DATE_PARSE
DATETIME_FORMAT
DATETIME_PARSE
TIME_PARSE
DATE_PART/DATEPART
DATE_TRUNC/DATETRUNC
FORMAT
TO_CHAR
DAY_OF_MONTH/DOM/DAY
DAY_OF_WEEK/DAYOFWEEK/DOW
DAY_OF_YEAR/DOY
DAY_NAME/DAYNAME
HOUR_OF_DAY/HOUR
ISO_DAY_OF_WEEK/ISODAYOFWEEK/ISODOW/IDOW
ISO_WEEK_OF_YEAR/ISOWEEKOFYEAR/ISOWEEK/IWOY/IW
MINUTE_OF_DAY
MINUTE_OF_HOUR/MINUTE
MONTH_OF_YEAR/MONTH
MONTH_NAME/MONTHNAME
NOW
SECOND_OF_MINUTE/SECOND
QUARTER
TODAY
WEEK_OF_YEAR/WEEK
YEAR
EXTRACT