Amazon Redshift提取Timestamp时间报错求助
在Amazon Redshift中提取Datetime列的时间部分
嘿,我来帮你搞定这个Redshift提取时间的问题!因为Redshift基于PostgreSQL 8.0,有些高版本PostgreSQL的函数可能不兼容,但有几个靠谱的方法可以轻松提取出你要的时间部分。
方法1:使用TO_CHAR()函数(推荐)
这是最通用的方式,能直接把Timestamp转换成你想要的时间格式字符串:
SELECT TO_CHAR(your_datetime_column, 'HH24:MI:SS') AS time_part;
比如针对你给的示例值测试:
SELECT TO_CHAR('2017-11-06 13:03:28'::TIMESTAMP, 'HH24:MI:SS');
执行后会返回13:03:28。这里的HH24代表24小时制的小时,MI是分钟,SS是秒;如果需要12小时制的结果,可以把HH24换成HH,想要显示上下午的话再加AM或PM。
方法2:直接转换为TIME类型
如果需要得到TIME类型而不是字符串,可以用CAST()函数:
SELECT CAST(your_datetime_column AS TIME) AS time_part;
用你的示例测试:
SELECT CAST('2017-11-06 13:03:28'::TIMESTAMP AS TIME);
返回的是13:03:28的TIME类型值,要是需要字符串格式,再套一层CAST(... AS VARCHAR)就行。
排查报错的常见原因
如果执行时出错,大概率是这几个问题:
- 列类型不匹配:如果你的列是VARCHAR类型,得先转换成TIMESTAMP再处理,比如:
SELECT TO_CHAR(CAST(your_varchar_column AS TIMESTAMP), 'HH24:MI:SS') AS time_part; - 格式符错误:比如把
HH24写成HH会得到12小时制结果,或者拼写错了格式符(比如把MI写成MIN),一定要注意Redshift支持的格式符规范。 - NULL值影响:如果列里有NULL,可能会导致报错,用
COALESCE()处理一下:SELECT TO_CHAR(COALESCE(your_datetime_column, CURRENT_TIMESTAMP), 'HH24:MI:SS') AS time_part;
完整示例
假设你的表叫user_actions,datetime列是action_time,查询所有记录的时间部分:
SELECT action_id, TO_CHAR(action_time, 'HH24:MI:SS') AS action_time_part FROM user_actions;
内容的提问来源于stack exchange,提问作者aggis
相关产品推荐
相关产品推荐

