发现开发人员在针对日期字段作SQL的Where条件时,每个人的写法五花八门,已看到的有以下写法:
1、AND to_char(sh.creation_date, 'YYYY-MM-DD') >= '2009-08-26'
2、AND to_date(to_char(sf.creation_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') >= to_date('2009-08-26', 'YYYY-MM-DD');
3、AND sh.creation_date >= to_date('2009-08-26','YYYY-MM-DD')
4、AND trunc(sh.creation_date) >= to_date('2009-08-26','YYYY-MM-DD')
正确的写法应该如下:
1、如果creation_date字段未建任何索引,可采用第3、4种写法,但是这种针对日期的查询,最好是对该字段创建索引;
2、如果creation_date字段创建了字段级索引,则必须采用第3种写法,否则索引利用不起来,有可能导致全表扫描;
3、如果creation_date字段创建了函数索引(TRUNC(CREATION_DATE)),则必须采用第4种写法,否则索引利用不起来,有可能导致全表扫描。
今后规定大家统一按照第4种写法,设计人员在创建索引时,可针对日期字段创建函数索引。
1、AND to_char(sh.creation_date, 'YYYY-MM-DD') >= '2009-08-26'
2、AND to_date(to_char(sf.creation_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') >= to_date('2009-08-26', 'YYYY-MM-DD');
3、AND sh.creation_date >= to_date('2009-08-26','YYYY-MM-DD')
4、AND trunc(sh.creation_date) >= to_date('2009-08-26','YYYY-MM-DD')
正确的写法应该如下:
1、如果creation_date字段未建任何索引,可采用第3、4种写法,但是这种针对日期的查询,最好是对该字段创建索引;
2、如果creation_date字段创建了字段级索引,则必须采用第3种写法,否则索引利用不起来,有可能导致全表扫描;
3、如果creation_date字段创建了函数索引(TRUNC(CREATION_DATE)),则必须采用第4种写法,否则索引利用不起来,有可能导致全表扫描。
今后规定大家统一按照第4种写法,设计人员在创建索引时,可针对日期字段创建函数索引。
本文深入探讨了SQL中针对日期字段进行查询的最佳实践,包括使用to_char、to_date、trunc等函数的正确写法,并强调了在创建索引时对日期字段的优化策略,以提升查询效率并避免全表扫描。
36

被折叠的 条评论
为什么被折叠?



