Недопустимая позиция в предложении SQL WHERE

У меня есть запрос, который я пишу, который проверяет поле идентификатора и выводит идентификационный номер из этого столбца на основе нескольких критериев. Теперь, когда у меня написана его логика, я хочу запустить запрос по каждому критерию, чтобы увидеть, работает ли логика. Итак, последняя часть моего запроса для этого выглядит следующим образом:

FROM TABLE1
WHERE SOURCE_SYSTEM_NM = 'XYZ' AND ((STRLEFT(SOURCE_ARRANGEMENT_ID,4)) NOT IN ('23CC','21CC'))
LIMIT 10000 

По сути, то, что я пытаюсь сделать здесь, это сказать, чтобы он возвращал мне только элементы с SOURCE_SYSTEM_NM, равным «XYZ», при этом удаляя все элементы с SOURCE_ARRANGEMENT_ID, первые 4 символа которых не равны «21CC» или «23CC». У меня есть третий критерий, по которому я также хочу отфильтровать: первые три символа должны быть «0CC».

Моя проблема, когда я запускаю это, я возвращаю ошибку «Неверная позиция». Я удалил одну из строк из критериев, и она работает. Итак, я решил добавить второе в его собственное предложение «НЕ В...» с И между ними, но это привело к той же ошибке.

Если бы мне пришлось угадывать, NOT IN ('21CC','23CC') ставит между ними И, и я думаю, что это должно быть корнем моей проблемы. Критерии в моем заявлении CASE получают идентификационный номер со следующим:

WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND STRLEFT(SOURCE_ARRANGEMENT_ID, 4) IN ('23CC','21CC') THEN STRRIGHT(SOURCE_ARRANGEMENT_ID, LENGTH(SOURCE_ARRANGEMENT_ID)-4)
WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND STRLEFT(SOURCE_ARRANGEMENT_ID, 3) IN ('0CC') THEN STRRIGHT(SOURCE_ARRANGEMENT_ID, LENGTH(SOURCE_ARRANGEMENT_ID)-3)
WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND (STRLEFT(SOURCE_ARRANGEMENT_ID, 4) NOT IN ('23CC','21CC') OR STRLEFT(SOURCE_ARRANGEMENT_ID, 3) NOT IN ('0CC')) THEN (SOURCE_ARRANGEMENT_ID)

Таким образом, я просто пытаюсь проверить каждый критерий, чтобы убедиться, что полученный/созданный идентификатор верен. Мне нужно отфильтровать, чтобы получить результаты для этого последнего оператора WHEN выше, но я продолжаю получать эту «Неверную позицию» в моем операторе WHERE в конце. Я использую Aginity для выполнения этого запроса, и он работает с базой данных IBM Netezza. Заранее спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
333
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я разобрался в чем тут дело - при выполнении

STRRIGHT(SOURCE_ARRANGEMENT_ID, LENGTH(SOURCE_ARRANGEMENT_ID)-4)

Некоторые из этих идентификаторов аранжировки не имеют 4 символов, поэтому я получал «Неверную позицию». Я исправил это, обновив этот запрос, чтобы вместо этого использовать substring():

SUBSTRING(SOURCE_ARRANGEMENT_ID,5,LENGTH(SOURCE_ARRANGEMENT_ID))

Это исправило мою проблему. Просто хотел опубликовать ответ на случай, если у других возникнет эта проблема. Это не специфично для Netezza, это будет реагировать таким образом на любой вариант SQL.

Другие вопросы по теме