让决策更智能
新一代智能数据分析平台

日期对比的正确写法

观小数发表于:2020年10月17日 11:34:32更新于:2020年10月29日 11:21:28

问题描述:

选择一个日期做对比,比如大于等于2020年2月2日或者小于等于2020年2月2日,此时如果对应的日期就是2020年2月2日,那么这两个的返回结果应该都是“true”,但实际运用中,却是一个返回“true”,一个返回了“false”:

0015f8a5ff5ab3a72e7bda023503261

原因分析:

上图中可以看到,日期的格式为时间戳(timestamp)格式,但是“>=2020-02-02”或者“<=2020-02-02”里的“2020-02-02”为string格式,这里是按照字符串来比较的 也就是比较长度,所以会有问题:0015f8a60b9027be67b4c0e19dce429所以这两者的比较会有问题。


解决方案:

方案1、改变维度里的日期格式:用to_date()函数把时间戳格式改为date格式,此时两者比较的结果,就是都返回“true”的:

0015f8a62070343bd08f368bfd9a564

0015f8a62826bbb06560c2dbffea806


方案2、改变比较条件直接把比较条件改为:[日期]>= "2020-02-02 00:00:00"和[日期]<= "2020-02-02 00:00:00":

0015f8a6326328ba33e200539226576

0015f8a637821bf79d7e807db79518f

就这个案例来讲,本身时分秒都是0,那么方案1更加方便一些。


衍生案例补充:

两个参数筛选器分别设置了开始时间和结束时间,且默认为{{{yesterday}}},默认值或者选择同一天时,被联动的卡片会没有数据,排查发现数据集的日期字段为时间戳格式,所以无法正确对比,解决方案可以参考方案1,用to_date() 函数把时间戳格式改为date格式。

小结:作日期对比的时候,格式或者字符串长度要对应上,如果是时间戳格式,那么原则上对比的条件也应该是时间戳格式,如果是date格式,那对比的条件原则上也应该是date格式。


其他格式转化为date格式的方法,可参考:to_date() 的正确使用方法

    您需要登录后才可以回复