注册
CASE WHEN 使用报错 -6118: 非法的时间日期类型数据
专栏/技术分享/ 文章详情 /

CASE WHEN 使用报错 -6118: 非法的时间日期类型数据

Live 2024/08/02 956 1 0
摘要

问题现象

image20240726150057719.png

问题分析

CREATE TABLE TEST_CASE_WHEN(YEAR INT,PERIOD VARCHAR,EMP_NAME VARCHAR); INSERT INTO TEST_CASE_WHEN VALUES(2024,'12','Lucy'); INSERT INTO TEST_CASE_WHEN VALUES(2024,'12C','Bob'); INSERT INTO TEST_CASE_WHEN VALUES(2024,'01A','Candy'); COMMIT; SELECT case when period in ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12') then to_date(T.YEAR||T.PERIOD,'yyyymm') else T.YEAR||T.PERIOD END as BUSINESS_DT FROM TEST_CASE_WHEN t ;

在使用 CASE WHEN 语句时,如果存在一些不规范的数据,会导致在 CASE 语句的分支中有一些无效的或不支持的操作,即使这些分支在实际运行时不该被执行。这是因为SQL引擎可能会尝试预计算所有可能的结果,导致某些表达式在某些情况下会引发错误。

解决方法

通过加HINT /*+ CASE_WHEN_CVT_IFUN(8) */可以有效地避免CASE WHEN语句中的预计算错误。

image20240726151005183.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服