在 Amazon redshift 中将天数转换为小时数

Convert days into hours in Amazon redshift

提问人:Keshav Sahu 提问时间:11/7/2023 最后编辑:marc_sKeshav Sahu 更新时间:11/14/2023 访问量:27

问:

我想将混合格式(如“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;
SQL postgresql-9.1 amazon-redshift-spectrum 火花-redshift

评论

0赞 John Rotenstein 11/8/2023
“转换为小时”是什么意思?通常,人们会去日期,这将返回一个 INTERVAL。然后,您可以从间隔中提取小时数。您能否提供一些示例输入和输出来演示您正在寻找的内容?

答:

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_daysyour_table

此查询使用正则表达式检查两种模式。第一种模式适用于“2 天”等情况,第二种模式适用于“1 天 07:00:00”等情况。然后,该子句根据匹配的模式计算相应的小时数。CASE WHEN