2015-01-09 3 views
1

Я ищу, чтобы сравнить два строковых поля в инструкции обновления. Оператор обновляет поле до 1, если есть текстовое совпадение, а 0 - нет. Проблема в том, что BLPU_TEXT имеет значение «55», а BLPU_PAO_SAO - «XX55XXX», он возвращает 0. Но я хочу, чтобы он возвращал 1, если есть какое-либо совпадение.Как сравнить две строки в операторе обновления

UPDATE NAG_ANALYSIS.AA3_ALL N 
SET N.CARTO_BLPU_BLPU_MATCH = 
(CASE WHEN N.BLPU_TEXT LIKE '%'||N.BLPU_PAO_SAO||'%' 
THEN 1 ELSE 0 END); 

Большое спасибо за ваше время

+2

Пожалуйста, добавьте тег, для которого вы используете DB - это даст вам более релевантные ответы. –

+2

У вас есть контроль над базой данных? Учитывая, что текст, который вы ищете, и текст, который вы ищете, находятся в одной записи, мне интересно, может ли CARTO_BLPU_BLPU_MATCH быть вычисляемым столбцом? –

+0

Да, у меня есть контроль над базой данных. Я рассмотрю предложение о расчетной колонке. Спасибо за вашу помощь – Baz

ответ

3

Поскольку вы ищете '55' 'XX55XXX', вам нужно переключить переменные в WHEN:

из

WHEN N.BLPU_TEXT LIKE '%'||N.BLPU_PAO_SAO||'%' 

до

WHEN N.BLPU_PAO_SAO LIKE '%'||N.BLPU_TEXT||'%' 

Это будет WHEN 'XX55XXX' LIKE '%55%'.

Он работает точно так же, как в обычном SQL SELECT [...] WHERE y LIKE z, где в шаблоне z выполняется поиск в каждом столбце y значение.

Смежные вопросы