【问题标题】:CONCAT within SQL CASE Statement in SnowflakeSnowflake 中 SQL CASE 语句中的 CONCAT
【发布时间】:2021-06-08 17:28:00
【问题描述】:

我正在尝试将列 REVENUE_MONTH 中的数据转换为 03 而不是 3。我还将将该新列与现有的 REVENUE_MONTH 和 REVENUE_YEAR 列连接起来以获得类似 2020-03-01 而不是 2020 -3-01。以下是我的两种方法,

  1. 使用 IN
CONCAT(REVENUE_YEAR,'-',CAST(CASE WHEN REVENUE_MONTH IN (1,2,3,4,5,6,7,8,9) THEN CONCAT(0,REVENUE_MONTH) ELSE REVENUE_MONTH END AS NUMBER(38,0)),'-','01')
  1. 使用长度()
CONCAT(REVENUE_YEAR,'-',CAST(CASE WHEN LENGTH(REVENUE_MONTH)=1 THEN CONCAT(0,REVENUE_MONTH) ELSE REVENUE_MONTH END AS NUMBER(38,0)),'-','01')

不幸的是,他们都在 2020 年 3 月 1 日返回,而不是预期的 2020 年 3 月 1 日

【问题讨论】:

    标签: sql concatenation case snowflake-cloud-data-platform string-length


    【解决方案1】:

    您尝试过 LPAD 吗?下面应该工作

    CONCAT(REVENUE_YEAR,'-', LPAD(REVENUE_MONTH,2,'0'),'-','01')

    【讨论】:

      【解决方案2】:
      SELECT column1, RIGHT('0' || CAST(column1 AS varchar(2)), 2) as month
      FROM VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
      ORDER BY 1;   
      

      给予:

      COLUMN1 MONTH
      1   01
      2   02
      3   03
      4   04
      5   05
      6   06
      7   07
      8   08
      9   09
      10  10
      11  11
      12  12
      

      但也可以是:

      SELECT column1, RIGHT('0' || column1::text, 2) as month
      FROM VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
      ORDER BY 1;   
      

      但你真正想要的是LPAD

      SELECT column1, LPAD( column1, 2, '0') as month
      FROM VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
      ORDER BY 1;   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 2014-12-05
        • 2022-12-07
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 1970-01-01
        相关资源
        最近更新 更多