提问人:Keshav Sahu 提问时间:11/7/2023 最后编辑:marc_sKeshav Sahu 更新时间:11/14/2023 访问量:27
在 Amazon redshift 中将天数转换为小时数
Convert days into hours in Amazon redshift
问:
我想将混合格式(如“1 天 07:00:00”和“2 天”)的列转换为小时。
下面是一个应该在 Amazon Redshift 中起作用的查询:
SELECT
CASE
WHEN POSITION('day', estimated_time_to_pickup) > 0 THEN
24 * CAST(SPLIT_PART(estimated_time_to_pickup, ' ', 1) AS INTEGER) +
EXTRACT(HOUR FROM TO_TIMESTAMP(SUBSTRING(estimated_time_to_pickup, POSITION('day', estimated_time_to_pickup) + 3), 'HH24:MI:SS'))
ELSE
24 * CAST(TRIM(' days' FROM estimated_time_to_pickup)::INTEGER)
END AS estimated_time_in_hours
FROM
"dev"."staging"."stg_zidship__service_levels_servicelevel"
LIMIT 100;
答:
0赞
Jay Sethia
11/14/2023
#1
您可以将子句与正则表达式一起使用来提取相关信息。下面是一个示例查询:CASE WHEN
SELECT
your_column_with_days,
CASE
WHEN your_column_with_days ~ '^\d+ day[s]?$' THEN
CAST(SUBSTRING(your_column_with_days FROM '(\d+) day[s]?$') AS INTEGER) * 24
WHEN your_column_with_days ~ '^\d+ day[s]? (\d{2}):(\d{2}):(\d{2})$' THEN
CAST(SUBSTRING(your_column_with_days FROM '(\d+) day[s]? (\d{2}):(\d{2}):(\d{2})$') AS INTEGER) * 24
+ CAST(EXTRACT(HOUR FROM INTERVAL '00:' || SUBSTRING(your_column_with_days FROM '(\d+) day[s]? (\d{2}):(\d{2}):(\d{2})$') || ' hours') AS INTEGER)
ELSE
NULL -- Handle other cases as needed
END AS hours
FROM
your_table;
替换为表中存储时间(以天为单位)的列的实际名称,以及表的实际名称。your_column_with_days
your_table
此查询使用正则表达式检查两种模式。第一种模式适用于“2 天”等情况,第二种模式适用于“1 天 07:00:00”等情况。然后,该子句根据匹配的模式计算相应的小时数。CASE WHEN
评论