postgresql时间戳和时间

本文介绍了如何使用SQL语句获取当前时间的时间戳,并演示了将时间戳转换为可读时间格式的方法。这对于需要处理时间数据的数据库应用非常有用。

获取时间戳

SELECT extract(epoch from now())

时间戳转时间


SELECT TO_TIMESTAMP(extract(epoch from now()))

 

PostgreSQL 中处理 Unix 时间戳非常方便,它提供了多种函数操作符来将 Unix 时间戳转换为可读的时间格式,或将普通时间格式转换为 Unix 时间戳。 ### Unix 时间戳转普通时间格式 可以使用 `TO_TIMESTAMP()` 函数将 Unix 时间戳转换为 PostgreSQL 中的时间戳格式。该函数将 Unix 时间戳(以秒为单位)转换为 `timestamp with time zone` 类型。 示例: ```sql SELECT TO_TIMESTAMP(1630000000); ``` 该语句将返回对应的时间戳所代表的日期时间,例如 `2021-08-25 12:26:40+00`。 如果需要格式化输出,可以结合 `AT TIME ZONE` 来指定时区并使用 `TO_CHAR()` 进行格式化: ```sql SELECT TO_CHAR(TO_TIMESTAMP(1630000000) AT TIME ZONE 'UTC', 'YYYY-MM-DD HH24:MI:SS'); ``` 这将返回 UTC 时区下的格式化时间字符串[^1]。 ### 普通时间格式转 Unix 时间戳 可以使用 `EXTRACT(EPOCH FROM ...)` 函数将时间戳转换为 Unix 时间戳(以秒为单位)。 示例: ```sql SELECT EXTRACT(EPOCH FROM NOW()); ``` 这将返回当前时间的 Unix 时间戳。 如果需要处理特定的时间戳,可以将其作为参数传入: ```sql SELECT EXTRACT(EPOCH FROM TIMESTAMP '2021-08-25 12:26:40'); ``` ### 处理带时区的时间戳 PostgreSQL 支持带时区的时间戳,因此在处理 Unix 时间戳时,可以显式指定时区以避免歧义。 例如,将 Unix 时间戳转换为特定时区的时间: ```sql SELECT TO_TIMESTAMP(1630000000) AT TIME ZONE 'Asia/Shanghai'; ``` 这将返回 `2021-08-25 20:26:40`(UTC+8)[^2]。 ### Unix 时间戳时间戳的加减运算 PostgreSQL 支持对时间戳进行加减操作,可以将 Unix 时间戳转换为时间戳类型后进行运算。 示例: ```sql SELECT TO_TIMESTAMP(1630000000) + INTERVAL '1 day'; ``` 这将返回 Unix 时间戳对应时间的下一天。 ### 获取当前 Unix 时间戳 可以使用 `EXTRACT(EPOCH FROM NOW())` 来获取当前的 Unix 时间戳: ```sql SELECT EXTRACT(EPOCH FROM NOW()); ``` 该语句返回的是以秒为单位的浮点数,如果只需要整数部分,可以使用 `FLOOR()` 函数: ```sql SELECT FLOOR(EXTRACT(EPOCH FROM NOW())); ``` ### 示例:将 Unix 时间戳转换为完整日期时间格式 以下是一个完整的 SQL 查询示例,将 Unix 时间戳转换为格式化的日期时间字符串: ```sql SELECT TO_CHAR(TO_TIMESTAMP(1630000000), 'YYYY-MM-DD HH24:MI:SS') AS formatted_time; ``` 输出结果类似于: ``` formatted_time ------------------- 2021-08-25 12:26:40 ``` ### 示例:将普通时间转换为 Unix 时间戳并存储 假设有一个表 `events`,其中包含一个 `event_time` 字段(类型为 `timestamp`),可以通过以下语句将其转换为 Unix 时间戳并插入新记录: ```sql INSERT INTO events (event_time) SELECT TO_TIMESTAMP(1630000000); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值