Search Shortcut cmd + k | ctrl + k
- 安装
- Documentation
- 入门指南
- 连接
- 数据导入
- 客户端API
- 概述
- C
- C++
- CLI
- Dart
- Go
- Java
- Julia
- Node.js (Neo)
- Node.js
- Python
- 概览
- 数据摄取
- DuckDB 和 Python 之间的转换
- DB API
- 关系型API
- Function API
- Types API
- Expression API
- Spark API
- API 参考
- 已知的Python问题
- R
- Rust
- Swift
- Wasm
- ADBC
- ODBC
- 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
- 导出和导入数据库
- 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
- 集合操作
- 预编译语句
- 数据类型
- 概览
- Array
- Bitstring
- Blob
- 布尔
- 日期
- Enum
- Interval
- 列表
- 字面量类型
- 映射
- NULL值
- Numeric
- Struct
- 文本
- Time
- 时间戳
- 时区
- Union
- 类型转换
- 表达式
- 函数
- 概览
- 聚合函数
- 数组函数
- 位串函数
- Blob 函数
- 日期格式化函数
- 日期函数
- 日期部分函数
- 枚举函数
- 间隔函数
- Lambda 函数
- 列表函数
- 映射函数
- 嵌套函数
- 数值函数
- 模式匹配
- 正则表达式
- Struct 函数
- 文本函数
- 时间函数
- 时间戳函数
- 带时区的时间戳函数
- 联合函数
- 实用函数
- 窗口函数
- 约束
- 索引
- Meta 查询
- DuckDB的SQL方言
- 示例
- 配置
- 扩展
- 概述
- 核心扩展
- 社区扩展
- 使用扩展
- 扩展的版本控制
- Arrow
- 自动完成
- AWS
- Azure
- Delta
- Excel
- 全文搜索
- httpfs (HTTP 和 S3)
- Iceberg
- ICU
- inet
- jemalloc
- MySQL
- PostgreSQL
- 空间
- SQLite
- Substrait
- TPC-DS
- TPC-H
- VSS
- 指南
- 概述
- 数据查看器
- 数据库集成
- 文件格式
- 网络和云存储
- 概览
- HTTP Parquet 导入
- S3 Parquet 导入
- S3 Parquet 导出
- S3 Iceberg 导入
- S3 Express One
- GCS 导入
- Cloudflare R2 导入
- 通过HTTPS / S3使用DuckDB
- Meta 查询
- ODBC
- 性能
- Python
- 安装
- 执行SQL
- Jupyter Notebooks
- SQL on Pandas
- 从Pandas导入
- 导出到 Pandas
- 从Numpy导入
- 导出到Numpy
- SQL on Arrow
- 从Arrow导入
- 导出到 Arrow
- Pandas上的关系API
- 多线程 Python
- 与Ibis的集成
- 与 Polars 的集成
- 使用 fsspec 文件系统
- SQL 编辑器
- SQL 功能
- 代码片段
- 术语表
- 离线浏览
- 操作手册
- 开发
- 内部结构
- Sitemap
- Why DuckDB
- Media
- FAQ
- Code of Conduct
- Live Demo
Documentation
/ SQL
/ Functions
Timestamp Functions
本节描述了用于检查和操作TIMESTAMP
值的函数和运算符。
另请参阅相关的TIMESTAMPTZ
函数。
时间戳操作符
下表显示了可用于TIMESTAMP
类型的数学运算符。
Operator | Description | Example | Result |
---|---|---|---|
+ |
添加一个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 days |
- |
减去一个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 years 6 months 20 days |
age(timestamp)
描述 | 从当前日期减去。 |
示例 | age(TIMESTAMP '1992-09-20') |
结果 | 29 years 1 month 27 days 12:39:00.844 |
century(timestamp)
描述 | 提取时间戳的世纪部分。 |
示例 | century(TIMESTAMP '1992-03-22') |
结果 | 20 |
current_localtimestamp()
描述 | 返回带有时区的当前时间戳(在事务开始时)。 |
示例 | current_localimestamp() |
结果 | 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') |
Result | 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)
Description | Get subfield (equivalent to 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') |
Result | 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') |
Result | 2 |
datepart([part, ...], timestamp)
描述 | date_part 的别名。获取列出的 子字段 作为 struct 。列表必须是常量。 |
示例 | datepart(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40') |
Result | {year: 1992, month: 9, day: 20} |
datepart(part, timestamp)
Description | Alias of date_part . Get subfield (equivalent to extract ). |
示例 | datepart('minute', TIMESTAMP '1992-09-20 20:38:40') |
Result | 38 |
datesub(part, startdate, enddate)
描述 | date_sub 的别名。时间戳之间的完整分区数量。 |
示例 | datesub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') |
Result | 1 |
datetrunc(part, timestamp)
描述 | date_trunc 的别名。截断到指定的 精度。 |
示例 | datetrunc('hour', TIMESTAMP '1992-09-20 20:38:40') |
Result | 1992-09-20 20:00:00 |
dayname(timestamp)
描述 | 星期几的(英文)名称。 |
示例 | dayname(TIMESTAMP '1992-03-22') |
结果 | Sunday |
epoch_ms(ms)
描述 | 将自纪元以来的毫秒数转换为时间戳。 |
示例 | epoch_ms(701222400000) |
结果 | 1992-03-22 00:00:00 |
epoch_ms(timestamp)
描述 | 将时间戳转换为自纪元以来的毫秒数。 |
示例 | epoch_ms('2022-11-07 08:43:04.123456'::TIMESTAMP); |
结果 | 1667810584123 |
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') |
Result | 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') |
Result | true |
isinf(timestamp)
描述 | 如果时间戳是无限的,则返回 true,否则返回 false。 |
示例 | isinf(TIMESTAMP '-infinity') |
Result | true |
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 |
monthname(timestamp)
描述 | 月份的(英文)名称。 |
示例 | monthname(TIMESTAMP '1992-09-20') |
结果 | September |
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])
描述 | 通过指定的间隔 bucket_width 截断 timestamp 。桶通过 offset 间隔偏移。 |
示例 | 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 时间戳对齐。origin 默认值为2000-01-03 00:00:00,用于不包含月或年间隔的桶,而对于月和年桶,默认值为2000-01-01 00:00:00。 |
示例 | 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']) |
Result | 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') |
Result | 1992-01-01 20:38:40 |
时间戳表函数
下表显示了可用于TIMESTAMP
类型的表函数。
Name | Description |
---|---|
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) |