搜索快捷键 cmd + k | ctrl + k
- 安装
- 文档
- 入门
- 连接
- 数据导入
- 客户端 API
- 概览
- ADBC
- C
- C++
- CLI
- Dart
- Go
- Java (JDBC)
- Julia
- Node.js (已弃用)
- Node.js (Neo)
- ODBC
- PHP
- Python
- R
- Rust
- Swift
- Wasm
- SQL
- 介绍
- 语句
- 概览
- ANALYZE
- ALTER TABLE
- ALTER VIEW
- ATTACH 和 DETACH
- CALL
- CHECKPOINT
- COMMENT ON
- COPY
- CREATE INDEX
- CREATE MACRO
- CREATE SCHEMA
- CREATE SECRET
- CREATE SEQUENCE
- CREATE TABLE
- CREATE VIEW
- CREATE TYPE
- DELETE
- DESCRIBE
- DROP
- EXPORT 和 IMPORT DATABASE
- INSERT
- LOAD / INSTALL
- PIVOT
- 性能分析
- SELECT
- SET / RESET
- SET VARIABLE
- SUMMARIZE
- 事务管理
- UNPIVOT
- UPDATE
- USE
- VACUUM
- 查询语法
- SELECT
- FROM 和 JOIN
- WHERE
- GROUP BY
- GROUPING SETS
- HAVING
- ORDER BY
- LIMIT 和 OFFSET
- SAMPLE
- 展开嵌套
- WITH
- WINDOW
- QUALIFY
- VALUES
- FILTER
- 集合操作
- 预处理语句
- 数据类型
- 表达式
- 函数
- 概览
- 聚合函数
- 数组函数
- 位字符串函数
- Blob 函数
- 日期格式化函数
- 日期函数
- 日期部分函数
- 枚举函数
- 间隔函数
- Lambda 函数
- 列表函数
- 映射函数
- 嵌套函数
- 数值函数
- 模式匹配
- 正则表达式
- 结构体函数
- 文本函数
- 时间函数
- 时间戳函数
- 带时区时间戳函数
- 联合函数
- 实用函数
- 窗口函数
- 约束
- 索引
- 元查询
- DuckDB 的 SQL 方言
- 示例
- 配置
- 扩展
- 核心扩展
- 概览
- 自动补全
- Avro
- AWS
- Azure
- Delta
- DuckLake
- 编码
- Excel
- 全文搜索
- httpfs (HTTP 和 S3)
- Iceberg
- ICU
- inet
- jemalloc
- MySQL
- PostgreSQL
- 空间
- SQLite
- TPC-DS
- TPC-H
- UI
- VSS
- 指南
- 概览
- 数据查看器
- 数据库集成
- 文件格式
- 概览
- CSV 导入
- CSV 导出
- 直接读取文件
- Excel 导入
- Excel 导出
- JSON 导入
- JSON 导出
- Parquet 导入
- Parquet 导出
- 查询 Parquet 文件
- 使用 file: 协议访问文件
- 网络和云存储
- 概览
- HTTP Parquet 导入
- S3 Parquet 导入
- S3 Parquet 导出
- S3 Iceberg 导入
- S3 Express One
- GCS 导入
- Cloudflare R2 导入
- 通过 HTTPS / S3 使用 DuckDB
- Fastly 对象存储导入
- 元查询
- ODBC
- 性能
- Python
- 安装
- 执行 SQL
- Jupyter Notebooks
- marimo Notebooks
- Pandas 上的 SQL
- 从 Pandas 导入
- 导出到 Pandas
- 从 Numpy 导入
- 导出到 Numpy
- Arrow 上的 SQL
- 从 Arrow 导入
- 导出到 Arrow
- Pandas 上的关系型 API
- 多个 Python 线程
- 与 Ibis 集成
- 与 Polars 集成
- 使用 fsspec 文件系统
- SQL 编辑器
- SQL 功能
- 代码片段
- 故障排除
- 术语表
- 离线浏览
- 操作手册
- 开发
- 内部结构
- 为什么选择 DuckDB
- 行为准则
- 发布日历
- 路线图
- 站点地图
- 在线演示
文档 / SQL / 函数
时间戳函数
本节介绍用于检查和操作TIMESTAMP
值的函数和运算符。另请参阅相关的TIMESTAMPTZ
函数。
时间戳运算符
下表显示了TIMESTAMP
类型可用的数学运算符。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ |
添加 INTERVAL |
TIMESTAMP '1992-03-22 01:02:03' + INTERVAL 5 DAY |
1992-03-27 01:02:03 |
- |
TIMESTAMP s 的减法 |
TIMESTAMP '1992-03-27' - TIMESTAMP '1992-03-22' |
5 天 |
- |
减去 INTERVAL |
TIMESTAMP '1992-03-27 01:02:03' - INTERVAL 5 DAY |
1992-03-22 01:02:03 |
对无限值进行加法或减法运算会生成相同的无限值。
标量时间戳函数
下表显示了TIMESTAMP
值可用的标量函数。
还有专门的提取函数用于获取子字段。
应用于无限日期的函数将根据“是否有意义”返回相同的无限日期(例如,greatest
)或NULL
(例如,date_part
)。通常,如果函数需要检查无限日期的部分,结果将为NULL
。
age(timestamp, timestamp)
描述 | 减去参数,结果为两个时间戳之间的时间差。 |
示例 | age(TIMESTAMP '2001-04-10', TIMESTAMP '1992-09-20') |
结果 | 8 年 6 个月 20 天 |
age(timestamp)
描述 | 从 current_date 中减去。 |
示例 | age(TIMESTAMP '1992-09-20') |
结果 | 29 年 1 个月 27 天 12:39:00.844 |
century(timestamp)
描述 | 提取时间戳的世纪。 |
示例 | century(TIMESTAMP '1992-03-22') |
结果 | 20 |
current_localtimestamp()
描述 | 返回带时区的当前时间戳(在事务开始时)。 |
示例 | current_localtimestamp() |
结果 | 2024-11-30 13:28:48.895 |
date_diff(part, startdate, enddate)
描述 | 时间戳之间分区边界的数量。 |
示例 | date_diff('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') |
结果 | 2 |
date_part([part, ...], timestamp)
描述 | 将列出的子字段作为struct 获取。列表必须是常量。 |
示例 | date_part(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40') |
结果 | {year: 1992, month: 9, day: 20} |
date_part(part, timestamp)
描述 | 获取子字段(等同于extract )。 |
示例 | date_part('minute', TIMESTAMP '1992-09-20 20:38:40') |
结果 | 38 |
date_sub(part, startdate, enddate)
描述 | 时间戳之间完整分区的数量。 |
示例 | date_sub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') |
结果 | 1 |
date_trunc(part, timestamp)
描述 | 截断到指定的精度。 |
示例 | date_trunc('hour', TIMESTAMP '1992-09-20 20:38:40') |
结果 | 1992-09-20 20:00:00 |
datediff(part, startdate, enddate)
描述 | date_diff 的别名。时间戳之间分区边界的数量。 |
示例 | datediff('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') |
结果 | 2 |
datepart([part, ...], timestamp)
描述 | date_part 的别名。将列出的子字段作为struct 获取。列表必须是常量。 |
示例 | datepart(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40') |
结果 | {year: 1992, month: 9, day: 20} |
datepart(part, timestamp)
描述 | date_part 的别名。获取子字段(等同于extract )。 |
示例 | datepart('minute', TIMESTAMP '1992-09-20 20:38:40') |
结果 | 38 |
datesub(part, startdate, enddate)
描述 | date_sub 的别名。时间戳之间完整分区的数量。 |
示例 | datesub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') |
结果 | 1 |
datetrunc(part, timestamp)
描述 | date_trunc 的别名。截断到指定的精度。 |
示例 | datetrunc('hour', TIMESTAMP '1992-09-20 20:38:40') |
结果 | 1992-09-20 20:00:00 |
dayname(timestamp)
描述 | 工作日的(英文)名称。 |
示例 | dayname(TIMESTAMP '1992-03-22') |
结果 | 星期日 |
epoch_ms(ms)
描述 | 将自纪元以来的毫秒数转换为时间戳。 |
示例 | epoch_ms(701222400000) |
结果 | 1992-03-22 00:00:00 |
epoch_ms(timestamp)
描述 | 返回自纪元以来的总毫秒数。 |
示例 | epoch_ms(TIMESTAMP '2021-08-03 11:59:44.123456') |
结果 | 1627991984123 |
epoch_ns(timestamp)
描述 | 返回自纪元以来的总纳秒数。 |
示例 | epoch_ns(TIMESTAMP '2021-08-03 11:59:44.123456') |
结果 | 1627991984123456000 |
epoch_us(timestamp)
描述 | 返回自纪元以来的总微秒数。 |
示例 | epoch_us(TIMESTAMP '2021-08-03 11:59:44.123456') |
结果 | 1627991984123456 |
epoch(timestamp)
描述 | 返回自纪元以来的总秒数。 |
示例 | epoch('2022-11-07 08:43:04'::TIMESTAMP); |
结果 | 1667810584 |
extract(field FROM timestamp)
描述 | 从时间戳中获取子字段。 |
示例 | extract('hour' FROM TIMESTAMP '1992-09-20 20:38:48') |
结果 | 20 |
greatest(timestamp, timestamp)
描述 | 两个时间戳中较晚的那个。 |
示例 | greatest(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234') |
结果 | 1992-09-20 20:38:48 |
isfinite(timestamp)
描述 | 如果时间戳是有限的,则返回true,否则返回false。 |
示例 | isfinite(TIMESTAMP '1992-03-07') |
结果 | true |
isinf(timestamp)
描述 | 如果时间戳是无限的,则返回true,否则返回false。 |
示例 | isinf(TIMESTAMP '-infinity') |
结果 | true |
julian(timestamp)
描述 | 从时间戳中提取儒略日数。 |
示例 | julian(TIMESTAMP '1992-03-22 01:02:03.1234') |
结果 | 2448704.043091706 |
last_day(timestamp)
描述 | 该月的最后一天。 |
示例 | last_day(TIMESTAMP '1992-03-22 01:02:03.1234') |
结果 | 1992-03-31 |
least(timestamp, timestamp)
描述 | 两个时间戳中较早的那个。 |
示例 | least(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234') |
结果 | 1992-03-22 01:02:03.1234 |
make_timestamp(bigint, bigint, bigint, bigint, bigint, double)
描述 | 给定部分的对应时间戳。 |
示例 | make_timestamp(1992, 9, 20, 13, 34, 27.123456) |
结果 | 1992-09-20 13:34:27.123456 |
make_timestamp(microseconds)
描述 | 将自纪元以来的微秒数转换为时间戳。 |
示例 | make_timestamp(1667810584123456) |
结果 | 2022-11-07 08:43:04.123456 |
make_timestamp_ns(nanoseconds)
描述 | 将自纪元以来的纳秒数转换为时间戳。 |
示例 | make_timestamp_ns(1667810584123456789) |
结果 | 2022-11-07 08:43:04.123456789 |
monthname(timestamp)
描述 | 月份的(英文)名称。 |
示例 | monthname(TIMESTAMP '1992-09-20') |
结果 | 九月 |
strftime(timestamp, format)
描述 | 根据格式字符串将时间戳转换为字符串。 |
示例 | strftime(timestamp '1992-01-01 20:38:40', '%a, %-d %B %Y - %I:%M:%S %p') |
结果 | Wed, 1 January 1992 - 08:38:40 PM |
strptime(text, format-list)
描述 | 将字符串text 转换为时间戳,应用列表中的格式字符串直到成功。失败时抛出错误。若要在失败时返回NULL ,请使用try_strptime 。 |
示例 | strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S']) |
结果 | 2023-04-15 10:56:00 |
strptime(text, format)
描述 | 根据格式字符串将字符串text 转换为时间戳。失败时抛出错误。若要在失败时返回NULL ,请使用try_strptime 。 |
示例 | strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p') |
结果 | 1992-01-01 20:38:40 |
time_bucket(bucket_width, timestamp[, offset])
描述 | 将timestamp 截断到宽度为bucket_width 的网格。当bucket_width 是月数或更粗的单位时,网格包含2000-01-01 00:00:00[ + offset] ;否则包含2000-01-03 00:00:00[ + offset] 。请注意,2000-01-03 是星期一。 |
示例 | time_bucket(INTERVAL '10 minutes', TIMESTAMP '1992-04-20 15:26:00-07', INTERVAL '5 minutes') |
结果 | 1992-04-20 15:25:00 |
time_bucket(bucket_width, timestamp[, origin])
描述 | 将timestamp 截断到宽度为bucket_width 的网格。网格包含origin 时间戳,当bucket_width 是月数或更粗的单位时,默认为2000-01-01 00:00:00 ;否则默认为2000-01-03 00:00:00 。请注意,2000-01-03 是星期一。 |
示例 | time_bucket(INTERVAL '2 weeks', TIMESTAMP '1992-04-20 15:26:00', TIMESTAMP '1992-04-01 00:00:00') |
结果 | 1992-04-15 00:00:00 |
try_strptime(text, format-list)
描述 | 将字符串text 转换为时间戳,应用列表中的格式字符串直到成功。失败时返回NULL 。 |
示例 | try_strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S']) |
结果 | 2023-04-15 10:56:00 |
try_strptime(text, format)
描述 | 根据格式字符串将字符串text 转换为时间戳。失败时返回NULL 。 |
示例 | try_strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p') |
结果 | 1992-01-01 20:38:40 |
时间戳表函数
下表显示了TIMESTAMP
类型可用的表函数。
名称 | 描述 |
---|---|
generate_series(timestamp, timestamp, interval) |
生成一个包含闭合范围内时间戳的表,按间隔步进。 |
range(timestamp, timestamp, interval) |
生成一个包含半开范围内时间戳的表,按间隔步进。 |
表函数边界不允许使用无限值。
generate_series(timestamp, timestamp, interval)
描述 | 生成一个包含闭合范围内时间戳的表,按间隔步进。 |
示例 | generate_series(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE) |
range(timestamp, timestamp, interval)
描述 | 生成一个包含半开范围内时间戳的表,按间隔步进。 |
示例 | range(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE) |