Синтаксическая ошибка в выражении РЕГИСТРА, которую невозможно исправить

#sql #oracle #case

#sql #Oracle #регистр

Вопрос:

Я хочу, чтобы приведенный ниже код в моем where condition: оператор условия выглядел так :

ЗА ОДИН ДЕНЬ ДО ОБНОВЛЕНИЯ В политике появилась новая независимая скидка (существует RAP16.DSCCD = ‘366’), А ПРИ ОБНОВЛЕНИИ Новая независимая скидка снижается (RAP16.DSCCD = ‘366’ отброшен)

Я попробовал приведенный ниже код

 AND case when tt.ja2_effdt_t = rap01.hmedt_t - 1
   then trim(RAP16.DSCCD) = '366'
   when trim(rap01.hmedt_t) <> tt.ja2_effdt_t) 
   then trim(RAP16.DSCCD) <> '366'
           end 
 

В приведенном ниже коде есть некоторая синтаксическая ошибка, но я не могу ее исправить.

Комментарии:

1. Обычно лучше использовать конструкции AND / OR вместо выражений case в предложении WHERE .

2. @jarlh можете ли вы помочь мне, как преобразовать приведенный выше код в И / ИЛИ форму? Спасибо!

Ответ №1:

Обычно лучше использовать AND OR конструкции / вместо case выражений в WHERE предложении. Вы, вероятно, хотите что-то вроде:

 AND ((tt.ja2_effdt_t = rap01.hmedt_t - 1 AND trim(RAP16.DSCCD) = '366')
     AND
     (trim(rap01.hmedt_t) <> tt.ja2_effdt_t AND trim(RAP16.DSCCD) <> '366'))
 

Комментарии:

1. Я хочу, чтобы оба условия выполнялись одновременно, так зачем нам нужно использовать ИЛИ здесь? Спасибо!

2. Я переключусь на И . (В то время ваше выражение case выполняло только одно условие. Теперь вы видите, почему AND / OR лучше!)

3. Спасибо за ценное предложение, не могли бы вы также рассказать, почему у меня возникла синтаксическая ошибка в операторе CASE.

4. Как указал @ch2019, у вас есть непревзойденный ) в конце when trim(rap01.hmedt_t) <> tt.ja2_effdt_t) .

5. И случай, когда tt.ja2_effdt_t = rap01.hmedt_t — 1 затем trim(RAP16.DSCCD) = ‘366’ когда rap01.hmedt_t <> tt.ja2_effdt_t затем trim(RAP16.DSCCD) <> ‘366’ end , если я использую это, синтаксическая ошибка все равно есть, и она ввторая строка «затем обрезать (RAP16.DSCCD) = ‘366’».