达梦:使用or 、between...and、 and 条件查询视图报非法的时间日期类型数据

文章讲述了在源表中时间字段存在不正确格式时,用户通过CASEWHEN在视图中格式化处理,但在使用OR、BETWEEN...AND等条件查询时遇到错误。解决方案是使用HINT和CASE_WHEN_CVT_IFUN(8)来优化CASEWHEN查询表达式,允许在查询中正常处理时间日期类型数据。
摘要由CSDN通过智能技术生成

背景:源表中的时间字段存在不合理的数据格式,用户在视图中对数据使用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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值