如何将带微秒的日期转换为仅含日期时分秒的字符串列
从含微秒的日期列提取“日期 时:分:秒”格式字符串
问题说明
有个Date列存储的日期带微秒(用逗号分隔),示例数据如下:
Date 10/11/22 12:14:01,807000000 11/12/22 13:15:46,650000000 29/12/22 14:30:46,501000000
需要生成名为Date_string的字符串列,只保留“日期 时:分:秒”部分,期望结果:
Date_string 10/11/22 12:14:01 11/12/22 13:15:46 29/12/22 14:30:46
你试过的无效代码
select*, TO_CHAR(extract(hour from (Date)))||':'||TO_CHAR(extract(minute from (Date)))||':'||TO_CHAR(extract(second from (Date))) as Date_string from table;
解决办法
情况1:Date列是字符串类型
直接截掉逗号及后面的内容即可,两种写法任选:
-- 用SUBSTRING截取 SELECT *, SUBSTRING("Date" FROM 1 FOR POSITION(',' IN "Date") - 1) AS Date_string FROM your_table; -- 用LEFT函数更简洁 SELECT *, LEFT("Date", POSITION(',' IN "Date") - 1) AS Date_string FROM your_table;
情况2:Date列是时间戳类型
直接用TO_CHAR指定格式输出,精准匹配需求样式:
SELECT *, TO_CHAR("Date", 'DD/MM/YY HH24:MI:SS') AS Date_string FROM your_table;
不确定列类型?用兼容写法
如果不确定列是字符串还是时间戳,先把字符串转成时间戳再格式化,适配性更强:
SELECT *, TO_CHAR(TO_TIMESTAMP("Date", 'DD/MM/YY HH24:MI:SS,US'), 'DD/MM/YY HH24:MI:SS') AS Date_string FROM your_table;
原代码失效原因
你之前的SQL只提取了时分秒部分,完全丢失了日期内容,所以不符合需求。
内容的提问来源于stack exchange,提问作者Ruser-lab9
相关产品推荐
相关产品推荐

