【问题标题】:extract year_month from a date column along with other columns in a sql table从日期列中提取 year_month 以及 sql 表中的其他列
【发布时间】:2022-01-19 22:02:35
【问题描述】:

我有一个包含多个字段的 sql 表,包括(但不限于以下):member_id、visit_date(日期时间格式,例如:2016-01-01)、visit_yr_qtr(作为字符串,例如:2016_Q1)、purchase_item(ID number)和 item_price(以美元为单位)。

我想提取这些字段,但还要在输出中包含 year_month(2016 年 1 月或 2016 年 1 月)作为新字段。这是我尝试做但没有成功的:

          select member_id, visit_date, visit_yr_qtr, purchase_item, item_price, 
          EXTRACT(year_month, visit_date)
          FROM <table name>

有人可以建议一种从输出中的 visit_date 列中提取 year_month 的方法吗?

【问题讨论】:

    标签: sql datetime snowflake-cloud-data-platform extract


    【解决方案1】:

    EXTRACT 的语法是

    EXTRACT( FROM )

    &lt;date_or_time_part&gt; 包括 yearmonth

    因此,要获得 yearmonth,您需要 2 次提取。

    CONCAT(EXTRACT(year FROM visit_date),'-', LPAD(EXTRACT(month FROM visit_date), 2, 0)) 
    

    更短的方法是使用TO_CHARformat

    TO_CHAR(visit_date,'YYYY-MM') 
    

    【讨论】:

    • Luk 作品精美!谢谢。
    • 谢谢。顺便说一句,我添加了一个 LPAD 以在 10 以下的月份中添加前导 0。
    • 傻笑 +1 以获得更小的答案!打得好,而且最明智..
    【解决方案2】:

    Luk 的回答很好,可以使用YEAR and MONTH 快捷功能,使用|| concat 标记全部变小,还有LPAD

    SELECT 
        '2016-01-01'::date as visit_date,
        CONCAT(EXTRACT(year FROM visit_date),'-', LPAD(EXTRACT(month FROM visit_date), 2, 0)) as way_1,
        year(visit_date) || '-' || month(visit_date) as way2,
        year(visit_date) || '-' || lpad(month(visit_date),2,'0') as way2_padded;
    

    给予:

    VISIT_DATE WAY_1 WAY2 WAY2_PADDED
    2016-01-01 2016-01 2016-1 2016-01

    【讨论】:

    • 我喜欢管道运算符方法,因为它可以避免在长而复杂的 sql 查询中使用括号。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多