【问题标题】:Convert epoch to date using DATEADD使用 DATEADD 将纪元转换为日期
【发布时间】:2019-09-05 09:20:21
【问题描述】:

我探索了很多。我正在使用它来将纪元时间转换为日期:

CASE 
  WHEN json_extract_path_text(cli, 'pickupDate') IS NULL OR json_extract_path_text(cli, 'pickupDate') = '' 
  THEN DATEADD(SECOND, CONVERT(bigint, json_extract_path_text(cli, 'pickupTime')), '1970-1-1'), '1970-1-1' ) 
  ELSE json_extract_path_text(cli, 'pickupDate') 
END AS "Start Date"

为了提供很少的上下文,如果 json 中的键 'pickupDate' 不存在,我需要使用这个键 'pickUpTime' 来获取值。当我这样做时,我得到这个错误:

无效操作:CASE类型文本和无时区时间戳无法匹配; 1 条语句失败。

有人可以帮我吗?我们如何指定时区或者是否有其他方法可以解决这个问题?

【问题讨论】:

    标签: sql amazon-redshift dateadd json-extract


    【解决方案1】:

    尝试将其分解为多个部分,看看问题可能出在哪里。

    这个表达式有效吗?

    DATEADD(SECOND, CONVERT(bigint, json_extract_path_text(cli, 'pickupTime')),'1970-1-1')
    

    如果是,则尝试查找前一个表达式和这个表达式的结果数据类型,看看它们是否匹配:json_extract_path_text(cli, 'pickupDate')

    如果可行,请尝试使用 DATE 前缀将 DATE '1970-1-1' 明确声明为日期。

    另外,不确定,但您在上面发布的表达式中似乎有一个额外的括号。

    【讨论】:

      【解决方案2】:

      错误信息非常清楚 - 您不能从 case 表达式返回两种不兼容的数据类型。

      case 表达式必须从它的所有分支返回兼容的数据类型,因此仅从 else 部分的 josn 中读取文本是不够的,您仍然需要将其转换为 datetime
      我不熟悉亚马逊红移的细节,但我猜你需要convert

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-19
        • 2018-04-24
        • 2011-12-06
        • 1970-01-01
        • 2014-12-11
        • 2012-07-29
        • 2022-08-04
        相关资源
        最近更新 更多