Hello,我正在绑定表1中col1的匹配值。如果值=="Tri/",则tab1.col2=="s1"。如果值=="Tri/v1/v11/",则为"s2"。我写了下面的代码,但在我的情况下不起作用(如果col1=="Tri/v1/v11/",那么s1不是我想要的。
case
when vh_state like '%Tri/%' then 's1'
when vh_state like'%Tri/v1/v11/%' then 's2'
else 'UNkown choice'
end as col2
这些都是按顺序评估的,所以你需要把最严格的放在第一位:
(case when vh_state like '%Tri/v1/v11/%' then 's2'
when vh_state like '%Tri/%' then 's1'
else 'Inconnu'
end) as col2
如果你不知道哪一个是最严格的,你可以使用一个子查询来匹配最长的:
(select v.value
from (values ('%Tri/v1/v11/%', 's2'),
('%Tri/%', 's1'),
) v(pattern, value)
where vh_state like v.pattern
order by length(pattern) desc
limit 1
)
问题是您在第一个case语句中使用了'%Tri/%',它限定了值Tri/v1/v11/因为它是一个类似的运算符,导致两种情况都为S1。更改案例陈述的顺序以使其正常工作
使用以下查询,
case when vh_state like '%Tri/v1/v11/%' then 's2'
when vh_state like '%Tri/%' then 's1'
else 'Inconnu'
end as col2