Hive:当Date为字符串时,在指定日期之间过滤数据

 感性的拉蕾啊拉蕾丶Renata 发布于 2023-01-30 17:06

我试图在2010年9月1日到2013年8月31日之间在Hive表中过滤数据.包含日期的列是字符串格式(yyyy-mm-dd).我可以在这个专栏上使用month()和year().但是如何使用它们在上述日期之间过滤数据呢?欢迎任何示例/示例代码!

3 个回答
  • 关于伟大的事情yyyy-mm-dd的日期格式是不存在需要提取month()year(),可以直接对字符串做比较:

    SELECT *
      FROM your_table
      WHERE your_date_column >= '2010-09-01' AND your_date_column <= '2013-08-31';
    

    2023-01-30 17:08 回答
  • 就像SQL一样,Hive支持BETWEEN运算符以获得更简洁的声明:

    SELECT *
      FROM your_table
      WHERE your_date_column BETWEEN '2010-09-01' AND '2013-08-31';
    

    2023-01-30 17:09 回答
  • Hive有很多很好的日期解析UDF:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions

    正如Nigel Tufnel所暗示的那样进行字符串比较可能是最简单的解决方案,尽管技术上它不安全.但你可能不需要担心,除非你的表有关于中世纪年龄的历史数据(只有3年数字的日期)或科幻小说的日期(超过4年的数字日期).

    无论如何,如果你发现自己想要进行更好的日期比较,或者你的日期格式不是"从大到小"的顺序,例如美国的"mm/dd/yyyy"惯例,那么你可以使用unix_timestamp两个参数:

    select *
    from your_table
    where unix_timestamp(your_date_column, 'yyyy-MM-dd') >= unix_timestamp('2010-09-01', 'yyyy-MM-dd')
    and unix_timestamp(your_date_column, 'yyyy-MM-dd') <= unix_timestamp('2013-08-31', 'yyyy-MM-dd')
    

    2023-01-30 17:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有