Vertica中如何批量将起始秒数转换为日期时间
解决Vertica中批量转换1980纪元秒数为日期时间的问题
嗨,作为Vertica新手碰到批量转换的问题太正常啦!你之前用\set定义变量的方式只适合单个值的转换,因为客户端变量是全局单一值,没法自动遍历表中的每一行记录。下面给你两种直接可行的批量处理方案:
方案1:查询时实时转换
假设你的表名为time_records,存储秒数值的字段叫epoch_secs(确保字段是数值类型,比如FLOAT/NUMERIC),直接执行这条SQL就能一次性得到所有记录的转换结果:
SELECT epoch_secs, DATE('1980-01-01') + INTERVAL '1 SECOND' * epoch_secs AS converted_datetime FROM time_records;
这个语句的逻辑很简单:把每行的秒数值乘以1秒的时间间隔,再和起始日期1980-01-01相加,就能得到对应的带毫秒的日期时间,和你单个转换的结果完全一致。
方案2:将转换结果持久化到表中
如果需要把转换后的日期时间永久存在表中,可以先新增字段再批量更新:
- 新增存储转换结果的字段:
ALTER TABLE time_records ADD COLUMN converted_timestamp TIMESTAMP(6);
- 批量更新所有记录:
UPDATE time_records SET converted_timestamp = DATE('1980-01-01') + INTERVAL '1 SECOND' * epoch_secs;
注意:如果你的秒数字段是字符串类型,需要先转换成数值,比如用
CAST(epoch_secs AS NUMERIC)代替上面的epoch_secs。
用你提供的测试值1199283171.887953002212558175021验证的话,这个方法会输出你预期的2018-01-01 14:12:51.887953,完全没问题。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

