在SQL查询数据时,对一个日期字段进行过滤,使用to_char函数可能会造成返回结果不准确的问题,下面将针对这个现象做出测试。
①查询日期大于2018.09.04的信息
从执行结果来看,发现比2018.09.04日期小的也显示出来了,正确的结果应该是下面的三条记录,那么造成这个的原因是什么呢?
②可以看到第一个SQL语句中过滤字段加了to_char函数,to_char将RQ字段转换为了字符类型,字符类型比较大小和日期类型是不一样的,看下字符类型是如何比较的:
从上述测试可以看到,val字段过滤小于‘3’时,结果123也显示了出来,如果是数字来讲这显然是不正常的。字符类型的比较是将字符转换为ASCII码对应的数值之后进行比较,而且是从左往右进行比较,只要有一个字符符合条件之后就不在进行比较。现在就可以解释上述日期类型比较有差错的问题了,当查询日期大于‘04-9月 -18’的日期时,由于to_char将日期转换为字符,在进行比较时只要RQ这个字段值第一个字符大于0就可以显示出来。