我收到以下代码的以下错误:
错误: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-Master-Online-Content”匹配的“IT-7003-ES-2019-AE”
无论如何,我接受了您的建议并运行了以下命令:
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;
这似乎有效,但我得到了重复的结果:
关于如何排除重复项的任何想法?