2013-05-07 3 views
0

У меня есть поле 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.

ответ

1
WHERE "ERR_CODES" LIKE '%Section_Not_Found_WCLS%' 

EDIT:

WHERE ',' + "ERR_CODES" + ',' LIKE '%,Section_Not_Found_WCLS,%' 
+1

Нет, это будет возвращать 'true' даже' My_Section_Not_Found_WCLS' – Teejay

+1

Да, я думал о решении, предложенном в вашем редактирования. Это было бы хорошим решением. (в любом случае, я думаю, что вы пропустили% в конце, не так ли?) – Teejay

+1

Да, спасибо. Исправлена. На основе синтаксиса РСУБД для конкатенации строк могут быть разные. Я не уверен, что он будет работать так же, как и на других серверах SQL Server. –

1

Другая возможная вещь, чтобы рассмотреть, делает базу данных более реляционные, как это стандарт.

Вместо того, чтобы держать пучок строк в строке, сделайте дополнительный стол, чтобы все было более организованным. Я создал изображение, чтобы точно изобразить то, что я имею в виду.

Suggestion

+0

Хорошая точка, но на самом деле это временная таблица, созданная пакетом, и сохранение err_codes в другой таблице недопустимо. – Teejay

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