postgresql 毫秒转日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql 毫秒转日期相关的知识,希望对你有一定的参考价值。
我用 to_timestamp(double) 这个函数转的
毫秒数: 1453702970185
转完后:48036-01-06 04:36:24.999936+08
怎么才能转成正常的格式?
cast(字段名 as date)
或者可以用substr截取追问
SELECT
cast(gather_time as date)
FROM
app_gather_info where del_flag = '0'
结果:
[Err] 错误: 无法把类型 bigint 转换为 date
LINE 2: cast(gather_time as date)
那就转varchar 再转 date
cast(gather_time as varchar(20))
截前8位 转date
SELECT
cast(cast(gather_time as varchar(20)) as date)
FROM
app_gather_info where del_flag = '0'
结果:
[Err] 错误: 日期/时间值超出范围: "1453982879849"
HINT: 也许你需要不同的 "datesytle" 设置.
不不不 你先把这个 结果粘给我看看
SELECT
cast(gather_time as varchar(20) )
FROM
app_gather_info where del_flag = '0'
gather_time
1453982879849
1454388798986
1453980442547
1453874578683
1453703024498
1453979728921
1453703519116
你这数据 本来就不对。。。
本身就不是timestamp...
晃点我
加我球球吧:说不清了。。。 851411534
但是这些数据在java中可以转成正常的日期呀,app传过来的毫秒数就是这样子了,你意思他们传的有问题,那么java中为什么可以正常转呢?
本回答被提问者采纳无法从毫秒时代 postgresql 中提取日期
【中文标题】无法从毫秒时代 postgresql 中提取日期【英文标题】:Can't extract date from milliseconds epoch postgresql 【发布时间】:2021-08-01 17:56:10 【问题描述】:我正在查询数据库 (RedShift),我有一条以 epoch MS 格式存储的信息。设想如下表格:
Purchase, date
1, 1620140227019
2, 1620140227045
3, 1620140226573
我需要将时间戳转换为可读的日期,但我无法使其与 to_timestamp() 或 extract() 一起使用。问题首先在于值的大小(不支持 13 位)。 我最接近的解决方案是
select to_timestamp(1620140226573/1000, 'SS')
但结果是0051-05-04 14:57:06
。换句话说,月份、日期和秒是正确的,但年份是错误的。
【问题讨论】:
【参考方案1】:您可以运行此查询
select to_timestamp(round(1620140227254/1000))
【讨论】:
它不工作。但是,我自己确实找到了解决方案: SELECT timestamp with time zone 'epoch' + 1620140227019/1000 * interval '1 second' AS convert_timestamp【参考方案2】:解决方案在文档中:https://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html
SELECT timestamp with time zone 'epoch' + 1620140227019/1000 * interval '1 second' AS converted_timestamp
或
select '1970-01-01'::date + 1620140227019/1000 * interval '1 second'
【讨论】:
以上是关于postgresql 毫秒转日期的主要内容,如果未能解决你的问题,请参考以下文章