规则如下:
依据这个规则、只有 3 种输出:大写、小写、首字母大写
测试如下:
sys@ORCL> select to_char(sysdate,'Month') from dual; TO_CHAR(SYSDATE,'MONTH') ------------------------------------ June sys@ORCL> select to_char(sysdate,'MOnth') from dual; TO_CHAR(SYSDATE,'MONTH') ------------------------------------ JUNE sys@ORCL> select to_char(sysdate,'month') from dual; TO_CHAR(SYSDATE,'MONTH') ------------------------------------ june
下面做个测试、确认这个规则对函数索引的影响:
sys@ORCL> drop table t purge; Table dropped. sys@ORCL> create table t as select object_id,sysdate+rownum as create_date from dba_objects where rownum<=5000; Table created. sys@ORCL> analyze table t compute statistics; Table analyzed. sys@ORCL> set autot trace exp sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-dd')='2011-06-02'; Execution Plan ---------------------------------------------------------- Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 50 | 500 | 5 (20)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T | 50 | 500 | 5 (20)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(TO_CHAR(INTERNAL_FUNCTION("CREATE_DATE"),'yyyy-mm-dd')='20 11-06-02') sys@ORCL> create index idx_t on t (to_char(create_date,'YYYY-MM-DD')); Index created. sys@ORCL> analyze index idx_t validate structure; Index analyzed. sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-dd')='2013-06-02'; Execution Plan ---------------------------------------------------------- Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 50 | 500 | 5 (20)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T | 50 | 500 | 5 (20)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(TO_CHAR(INTERNAL_FUNCTION("CREATE_DATE"),'yyyy-mm-dd')='20 13-06-02') sys@ORCL> set autot off sys@ORCL> create index idx_t_001 on t (to_char(create_date,'yyyy-mm-dd')); Index created. sys@ORCL> analyze index idx_t_001 validate structure; Index analyzed. sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-dd')='2013-06-02'; no rows selected sys@ORCL> set autot trace exp 第一种情况:小写 sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-dd')='2013-06-02'; Execution Plan ---------------------------------------------------------- Plan hash value: 512271049 ----------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 50 | 500 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T | 50 | 500 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IDX_T_001 | 20 | | 1 (0)| 00:00:01 | ----------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access(TO_CHAR(INTERNAL_FUNCTION("CREATE_DATE"),'yyyy-mm-dd')='2013-06-02' ) 第二种情况:首字母大写 sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-Dd')='2013-06-02'; Execution Plan ---------------------------------------------------------- Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 50 | 500 | 5 (20)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T | 50 | 500 | 5 (20)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(TO_CHAR(INTERNAL_FUNCTION("CREATE_DATE"),'yyyy-mm-Dd')='20 13-06-02') 第三种情况:大写 sys@ORCL> select * from t where to_char(create_date,'yyyy-mm-DD')='2013-06-02'; Execution Plan ---------------------------------------------------------- Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 50 | 500 | 5 (20)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T | 50 | 500 | 5 (20)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(TO_CHAR(INTERNAL_FUNCTION("CREATE_DATE"),'yyyy-mm-DD')='20 13-06-02')
作者:linwaterbin 发表于2013-6-2 21:11:13 原文链接
阅读:21 评论:0 查看评论