美文网首页
【HIVE/MySQL】 sql中 between * and

【HIVE/MySQL】 sql中 between * and

作者: yimengtianya1 | 来源:发表于2020-11-11 17:15 被阅读0次

    背景

    hive/mysql下使用sql中的between * and * 在不同数据类型下竟然不一样。
    1、int类型、float类型、string类型是包含头尾的。
    2、timestamp包含头,但不包含尾!!!此外,当between a and a 时, 是不包含a的。
    具体原因,有待进一步调研。

    避坑办法

    使用大于等于和小于等于替代between * and * ,避免这个问题。

    验证过程

    1、int、float类型数据——包含头尾

    select
        7 as time
        , case when 7  between 7 and 8 then "1" else "0" end as judge
    union all
    select
        8 as time
        , case when 8  between 7 and 8 then "1" else "0" end as judge
    
    图片.png
    select
        7.0  as time
        , case when 7.0   between 7.0  and 8.0  then "1" else "0" end as judge
    union all
    select
        8.0  as time
        , case when 8.0   between 7.0  and 8.0  then "1" else "0" end as judge
    
    图片.png

    2、string类型——包含头尾

    select
        to_date(now())  as time
        , case when to_date(now())              between "2020-11-11" and "2020-11-12" then "1" else "0" end as judge
    union all
    select
        to_date(date_add(now(),1)) as time
        , case when to_date(date_add(now(),1))  between "2020-11-11" and "2020-11-12" then "1" else "0" end as judge
    
    图片.png

    3、timestamp类型——包含头,但不包含结尾

    select
        now() as time
        , case when now()               between "2020-11-11" and "2020-11-12" then "1" else "0" end as judge
    union all
    select
        date_add(now(),1) as time
        , case when date_add(now(),1)  between "2020-11-11" and "2020-11-12" then "1" else "0" end as judge
    
    图片.png

    相关文章

      网友评论

          本文标题:【HIVE/MySQL】 sql中 between * and

          本文链接:https://www.haomeiwen.com/subject/qitybktx.html