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

问题描述 投票:0回答:1

我想将“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 amazon-redshift postgresql-9.1 amazon-redshift-spectrum spark-redshift
1个回答
0
投票

您可以使用

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
子句根据匹配的模式计算相应的小时数。

© www.soinside.com 2019 - 2024. All rights reserved.