【问题标题】:In snowflake , how to convert one date format to another format. From YYYYMMDD to YYYY-MON-DD在雪花中,如何将一种日期格式转换为另一种格式。从 YYYYMMDD 到 YYYY-MON-DD
【发布时间】:2020-12-27 00:49:24
【问题描述】:

我有表 ABC,其中有数据类型 Date 的 Z 列。数据格式为 YYYYMMDD。现在我希望将上述格式转换为 YYYY-MON-DD 格式。有人可以帮忙吗?

【问题讨论】:

  • 如果 z 列在 SF 中定义为日期,则其格式不应为 YYYYMMDD。是否定义为 varchar?
  • Z 列定义为 Number(38,0)。另一个问题:如果将列定义为日期,格式会是什么?
  • Snowflake 有几个参数可以确定您看到的格式或 Snowflake 期望的格式。 DATE_OUTPUT_FORMAT 和 DATE_INPUT_FORMAT。该参数与内部如何存储日期无关。
  • To_char(to_date(To_char(z),'YYYYMMDD'),'YYYY-MON-DD)有什么区别。和。 to_date(z,'YYYY-MON-DD')。第一个逻辑完美运行,而第二个逻辑不起作用。为什么是这样。基础列 Z 是日期数据类型,首选项设置为 YYYYMMDD。
  • 如果z定义为数字,尝试to_date(z,'YYYY-MON-DD')时会报错。

标签: date snowflake-cloud-data-platform date-format data-conversion to-date


【解决方案1】:

你可以使用 to_char

TO_CHAR(Z,'YYYY-MON-DD')

【讨论】:

  • 我试过这个.. 但这不起作用。我尝试了以下方法,它奏效了。我不确定有什么区别。 To_char(to_date(To_char(z),'YYYYMMDD'),'YYYY-MON-DD).
  • 表格中 z 的数据类型是什么?你能做一个 get_ddl 来找出答案吗
【解决方案2】:

根据重新格式化的目的,您可以将其显式转换为 VARCHAR/CHAR 并定义格式,也可以将显示格式更改为您希望查看的所有日期:

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'YYYY-MON-DD';

请务必了解,如果数据位于 DATE 字段中,则将其存储为日期,日期的格式取决于您的查看偏好,而不是存储方式。

【讨论】:

  • To_char(to_date(To_char(z),'YYYYMMDD'),'YYYY-MON-DD)有什么区别。和。 to_date(z,'YYYY-MON-DD')。第一个逻辑完美运行,而第二个逻辑不起作用。为什么是这样。基础列 Z 是日期数据类型,并且首选项设置为 YYYYMMDD。
  • 听起来 z 列实际上不是日期数据类型。你能确认一下吗?
【解决方案3】:

由于日期字段的值存储为数字,因此您必须将其转换为日期。

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'YYYY-MON-DD';

选择 to_date(to_char(z), 'YYYYMMDD');

【讨论】:

    【解决方案4】:

    (添加这个答案是为了总结和解决问题——因为线索和答案都是通过cmets分散的)

    • 问题表明列Z 的类型为DATE,但它看起来确实是NUMBER
    • 那么在将20201017 之类的数字解析为日期之前,首先需要将其转换为STRING
    • 将原始数字解析为日期后,可以将其表示为根据需要格式化的新字符串。
    WITH data AS (
      SELECT 20201017 AS z
    )
    
    SELECT TO_CHAR(TO_DATE(TO_CHAR(z), 'YYYYMMDD'), 'YYYY-MON-DD')
    FROM data;
    
    # 2020-Oct-17
    

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多