欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle|to_date()格式化日期【坑】

程序员文章站 2022-04-21 14:59:37
...

今天调整报表检索条件的时候遇到to_date()格式化日期的问题,明细如下:

1.总数据 159条

select * from daily_file_information;

Oracle|to_date()格式化日期【坑】
2.查询每月数据 3月-139条 4月-16条 5月-4条

select to_char(dfi_create_time,'yyyy-mm'),count(1) from daily_file_information  group by to_char(dfi_create_time,'yyyy-mm');

Oracle|to_date()格式化日期【坑】
3.第一种查询方式 【…between…and…】

SQL1:结果159

select count(1) from daily_file_information where 1=1 and to_char(dfi_create_time,'yyyy-mm') between '2020-03' and '2020-05' ;

Oracle|to_date()格式化日期【坑】
SQL2:结果155

select count(1) from daily_file_information where 1=1 and dfi_create_time between to_date('2020-03','yyyy-mm') and to_date('2020-05','yyyy-mm')  ;

Oracle|to_date()格式化日期【坑】
4.第二种查询方式 【…大于等于…小于等于…】

SQL3:结果159

select count(1) from daily_file_information where 1=1 and to_char(dfi_create_time,'yyyy-mm') >= '2020-03' and to_char(dfi_create_time,'yyyy-mm') <= '2020-05' ;

Oracle|to_date()格式化日期【坑】
SQL4:结果155

select count(1) from daily_file_information where 1=1 and dfi_create_time >= to_date('2020-03','yyyy-mm') and dfi_create_time <= to_date('2020-05','yyyy-mm')  ;

Oracle|to_date()格式化日期【坑】
5.差异数据:to_date()格式化4条5月份数据Oracle|to_date()格式化日期【坑】

to_date(‘2020-05’) 结果为:2020/05/01
Oracle|to_date()格式化日期【坑】

结论:

经过几个SQL的查询方式对比发现以to_date()转换数据查询的结果可能与预期结果数据不一致。

一般情况下在做类似时间过滤的时候我还是比较喜欢用to_char()的方式,根据这几个查询的结论而言还是建议大家慎用to_date()这个函数。

我是二哥(Jayla),每天总结一点点,每天进步一点点。
我是二哥(Jayla),欢迎大家关注我的公众号:
每天总结一点点,每天进步一点点。
专注Java相关知识,每天准时分享干货。 SpringBoot/Oracle/Git/Linux/Mysql 期待您的加入~
Oracle|to_date()格式化日期【坑】