背景:源表中的时间字段存在不合理的数据格式,用户在视图中对数据使用case when 对时间字段进行了格式化的处理。查询视图的时候使用改字段进行条件查询,发现:使用or 、between...and、 and 条件查询视图报非法的时间日期类型数据,如图1;使用一个条件查询却能正常返回数据,如图2和图3。
图1
图2
图3
解决办法:
在视图中使用HINT , CASE_WHEN_CVT_IFUN(8) 即可解决,查询正常。
--- 需完善
CASE_WHEN_CVT_IFUN
简介:是否将CASE WHEN查询表达式转换为一个内部函数进行处理。
属性:会话级,同时支持HINT指定
缺省值:9
对 CASE WHEN 查询表达式的优化处理。
0:不优化;
1:将 CASE WHEN 查询表达式转换为 IFOPERATOR 函数;
2:将 CASE WHEN 查询表达式转换为 IFOPERATOR 函数,且有限制地进行表达式重用;
4:CASE WHEN 查询表达式在运算符中转换为 OR 进行处理;
8:对于 CASE WHEN 查询表达式不允许 THEN…ELSE 表达式重用支持使用上述有效值的组合值,如 5 表示同时进行 1 和 4 的优化
关于这个参数我本人还未能理解,只做这个问题和解决办法的记录。
欢迎交流指导~
~~~~~~~~~~~~~~~~~~~分享完毕~~~~~~~~~~~~~~~~~~~~~~~~~~
更多内容,请访问达梦社区地址:https:eco.dameng.com