У меня есть поле ERR_CODES
на моем db, которое содержит некоторые коды ошибок для текущей записи.Поле SQL содержит строку (разделенная запятой или в начале/конце)
Например, он может содержать:
Invalid_Template_Code_Filename_WCLS,Color_Template_Of_Different_Domain_WCLS,Section_Not_Found_WCLS
Предположим, что необходимо проверить, если он содержит Section_Not_Found_WCLS
, без добавления запятой в начале и в конце поля.
я должен проверить:
WHERE "ERR_CODES" LIKE '%,Section_Not_Found_WCLS,%' --between other errs
OR "ERR_CODES" LIKE 'Section_Not_Found_WCLS,%' --at start of a err sequence
OR "ERR_CODES" LIKE '%,Section_Not_Found_WCLS' --at end of a err sequence
OR "ERR_CODES" = 'Section_Not_Found_WCLS' --unique err for this record
Это не очень красиво.
Есть ли способ сжать это, используя подстановочные знаки?
EDIT:
В RegEx это будет ((?<=,)|^)Section_Not_Found_WCLS((?=,)|$)
В идеале я хочу решение, которое будет работать на каждом из Oracle, MSSQL, PGSQL.
Нет, это будет возвращать 'true' даже' My_Section_Not_Found_WCLS' – Teejay
Да, я думал о решении, предложенном в вашем редактирования. Это было бы хорошим решением. (в любом случае, я думаю, что вы пропустили% в конце, не так ли?) – Teejay
Да, спасибо. Исправлена. На основе синтаксиса РСУБД для конкатенации строк могут быть разные. Я не уверен, что он будет работать так же, как и на других серверах SQL Server. –