首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用年和月构造日期

使用年和月构造日期
EN

Stack Overflow用户
提问于 2020-02-18 16:39:13
回答 2查看 398关注 0票数 1

我只想从一年和一个月构建一个日期。我目前正在运行这样的查询:

代码语言:javascript
复制
SELECT
    yyyy_mm_dd AS 
    t.year,
    t.month,
    t.id,
    t.name,
    ...,
    ...
    ...
FROM(
    SELECT
        p.last_yyyy_mm_dd,
        p.id,
        p.name,
    FROM(
        SELECT
            t.*,
            MAX(yyyy_mm_dd) OVER (PARTITION BY last_day(yyyy_mm_dd)) as last_yyyy_mm_dd
        FROM
            table1 t
        WHERE
            yyyy_mm_dd IS NOT NULL
            AND name = 'XXX'
    ) p
    WHERE
        yyyy_mm_dd = last_yyyy_mm_dd
) p
RIGHT JOIN(
    SELECT
        YEAR(yyyy_mm_dd) as year,
        MONTH(yyyy_mm_dd) as month,
        id,
        name,
        ...,
        ...,
        ...,
    FROM
        table2
    WHERE
        yyyy_mm_dd IS NOT NULL
        AND name = 'XXX'
    GROUP BY
        1,2,3,4
    ) t
ON
    p.id = t.id
    AND YEAR(p.last_yyyy_mm_dd) = t.year
    AND MONTH(p.last_yyyy_mm_dd) = t.month

在顶级select中,我还希望有一个从年份和月份构造的日期(YYYY-MM-DD)字段。日期部分应该是给定月份的最后一天。例如,对于一月份,它将是31。

我在这里查看了https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions,可以看到last_day可能很有用,但是似乎没有像MySQL - https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html中那样的make date功能。我如何在Hive中构造这样的date?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 18:17:07

如果您有普通日期,则可以使用substrdate_format提取yyyy-MM

代码语言:javascript
复制
select substr('2020-01-15',1,7);
OK
2020-01

select date_format('2020-01-15','yyyy-MM');
OK
2020-01

要从正常日期获取上个月的日期,可以使用last_day

代码语言:javascript
复制
select last_day(concat(substr('2020-01-15',1,7),'-01'));
OK
2020-01-31

如果你有yyyy-MM并且想要最后一个月的日期,把它和'-01‘连接起来,然后应用last_day:

代码语言:javascript
复制
select last_day(concat('2020-01','-01'));
OK
2020-01-31
票数 1
EN

Stack Overflow用户

发布于 2020-02-18 17:16:35

尝试下一段代码。它对我来说很有效:

代码语言:javascript
复制
select to_date(date_sub(add_months(concat(from_unixtime(unix_timestamp('2020-01','yyyy-MM'), 'yyyy-MM'),'-01'),1),1))

输出:

代码语言:javascript
复制
+-------------+--+
|     _c0     |
+-------------+--+
| 2020-01-31  |
+-------------+--+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60276808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档