столбец совпадений sql - PullRequest
0 голосов
/ 03 мая 2020

Helllo, я связываюсь со значением col1 в tab1. Значение IF == 'Tri /' затем tab1.col2 == 's1'. Значение IF == '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

Ответы [ 2 ]

0 голосов
/ 03 мая 2020


Привет, Чарльз,

Проблема в том, что вы использовали '% Tri /%' в первом операторе case, который квалифицирует значение Tri / v1 / v11 / , поскольку это оператор типа like, приводящий к S1 для обоих случаев. Измените порядок определения регистра, чтобы он работал правильно

Используйте приведенный ниже запрос,

case when vh_state like '%Tri/v1/v11/%' then 's2'
  when vh_state like '%Tri/%' then 's1'
  else 'Inconnu'
 end as col2

Дайте мне знать, если вам неясно.

Спасибо

0 голосов
/ 03 мая 2020

Они оцениваются по порядку, поэтому вам нужно поставить самое ограничительное в первую очередь:

(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
)               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...