为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:linux
【CPU】:
【问题描述】*:
CREATE TABLE “A06_TEMP_20230216”
(
“ID” VARCHAR2(40) NOT NULL,
“A0100” VARCHAR2(40) NOT NULL,
“A0615” VARCHAR2(200),
“A0620” VARCHAR2(300),
“A06231” VARCHAR2(500),
“A0623R” VARCHAR(32767),
“STATE” VARCHAR2(1) NOT NULL,
“A0605D” TIMESTAMP(0),
“A0605” VARCHAR(7),
“A0610” VARCHAR(7),
“ORDER_NUM” NUMBER(10,0) NOT NULL,
“A0631” VARCHAR2(4),
“A06311” VARCHAR(6)) ;
insert into “A06_TEMP_20230216” (“ID”,“A0100”,“A0615”,“A0620”,“A06231”,“A0623R”,“STATE”,“A0605D”,“A0605”,“A0610”,“ORDER_NUM”,“A0631”,“A06311”) values (‘xl2_2012SM921155’, ‘00000059’, ‘北京市宣武区和平门中学’, ‘学生’, null, null, ‘0’, ‘1977-01-01’, ‘1977.01’, ‘1980.05’, 1, null, null);
–第一个查询语句
select
case when a0623r is null or a0623r = ‘’
then ‘aaaaaaaaa’
else (case when to_date(replace(substr(trim(a0623r), 0,7), ‘.’, ‘-’) || ‘-01’,‘yyyy-MM-dd’) < to_date(to_char(m.a0605d,‘yyyy-MM’) || ‘-01’,‘yyyy-MM-dd’)
then ‘333333’
else ‘222’ end ) end a0623 from (a06_temp_20230216) m
where id=‘xl2_2012SM921155’ ;
–第二个查询语句
select
case when a0623r is null or a0623r = ‘’
then ‘aaaaaaaaa’
when to_date(replace(substr(trim(a0623r), 0,7), ‘.’, ‘-’) || ‘-01’,‘yyyy-MM-dd’) < to_date(to_char(m.a0605d,‘yyyy-MM’) || ‘-01’,‘yyyy-MM-dd’)
then ‘333333’
else ‘222’ end a0623 from (a06_temp_20230216) m
where id=‘xl2_2012SM921155’ ;
以上两个查询语句表达的意思是一样的,但是第一个查询语句会报错;由于之前老系统用的oracle,当时很多事第一种写法,迁移到达梦后,会报错,看是否有解决办法
参数CASE_WHEN_CVT_IFUN设置不为1即可,默认值为9,比如改成8

sp_set_para_value(1,‘CASE_WHEN_CVT_IFUN’,8);