我在下面的代码中收到以下错误:
错误:AND的参数必须为布尔型,不能改变字符类型第9行:案例^SQL状态:42804字符:300
此代码可做一些事情,但我遇到的麻烦是案件陈述。我希望此片段查找两个字符串的前11个字符匹配的实例。如果对于给定的记录而言不正确,则查看前10个字符,然后查看9,然后查看8。之后,可以接受null。
select cm.course_id, cm.course_name, cmp.course_id as parentcourse,
(select cmm.course_id
from course_main cmm
where cmm.course_id ilike '%Master%'
and cmm.course_id not ilike '%Ground%'
and cmm.course_id not ilike '%Surprise%'
and cmm.course_id not ilike '%emba%'
and cmm.row_status != 2
and case
when left(cm.course_id,11) = left(cmm.course_id,11)
then cmm.course_id
else
case
when left(cm.course_id,10) = left(cmm.course_id, 10)
then cmm.course_id
else
case
when left(cm.course_id,9) = left(cmm.course_id, 9)
then cmm.course_id
else
case
when left(cm.course_id,8) = left(cmm.course_id,8)
then cmm.course_id
end
end
end
end) as mastercourse
from course_main as cm
left join course_course cc
on cc.crsmain_pk1 = cm.pk1
left join course_main cmp
on cmp.pk1 = cc.crsmain_parent_pk1
where cm.course_id ilike '%-ES-2020-%'
and cm.row_status != 2
and cmp.course_id is null
order by cm.course_id;
感谢您的帮助,Z4。我尝试了应用您的建议,并且能够克服错误。这些字符串的问题是我正在尝试匹配以下内容:
在也包含以下内容的环境中,“ [NRSG-46009-ES-2020-OA”至“ NRSG-46009-Master-Online-Content”:
'NRSG-46006-Master-Online-Content''NRSG-46003-Master-Online-Content''NRSG-4600-Master-Online-Content'
如果在查看前11个字符之前先查看前8个字符,则会出现不匹配的情况。所以,我首先看11。如果没有匹配项,请查看前十个,依此类推。字符串8是我们的ID模式中的下标,例如以下示例:
'IT-7003-ES-2019-AE',需要与'IT-7003-Master-Online-Content'相匹配]
无论如何,我接受了您的建议并执行以下操作:
select distinct cm.course_id, cm.course_name, cmp.course_id as parentcourse, case when left(cm.course_id,11) = left(cmm.course_id,11) then cmm.course_id else case when left(cm.course_id,10) = left(cmm.course_id, 10) then cmm.course_id else case when left(cm.course_id,9) = left(cmm.course_id, 9) then cmm.course_id else case when left(cm.course_id,8) = left(cmm.course_id,8) then cmm.course_id end end end end as mastercourse from course_main cm left join course_course cc on cc.crsmain_pk1 = cm.pk1 left join course_main cmp on cmp.pk1 = cc.crsmain_parent_pk1 left join course_main cmm on cm.pk1 = cm.pk1 where cm.course_id ilike '%-ES-2020-%' and cm.row_status != 2 and cmp.course_id is null and cmm.course_id ilike '%Master%' and cmm.course_id not ilike '%Ground%' and cmm.course_id not ilike '%Surprise%' and cmm.course_id not ilike '%emba%' and cmm.row_status != 2 order by cm.course_id;
这似乎有效,但是我得到重复的结果:
关于如何排除重复项的任何想法?
我在下面的代码中收到以下错误:错误:AND的参数必须为布尔值类型,而不是不同字符的第9行:和大小写^ SQL状态:42804字符:300这...
首先,实际上不需要使用这种复杂的case
语句。如果前8个字符不匹配,那么肯定是前9个,10个或11个都不匹配,对吗?因此,只需清除整个内容,然后仅检查前8个: