Реализация регулярного выражения в IBM i использует апострофы (вместо, например, косых черт) для разграничения строки регулярного выражения, т.е.
... where REGEXP_SUBSTR(MYFIELD,'myregex_expression')
Если я пытаюсь использовать апостроф внутри [группы] внутри выражения, это всегда приводит к ошибкам - вероятно, думая, что я даю заключительную цитату. Я пытался:
- избежать этого: \ '
- удвоение: '' (и утроение)
Нет радости Я не могу найти ничего релевантного в руководстве по IBM SQL или в поиске Google.
Мне действительно нужно это, например, разрешить имена типа О'Лири.
2 ответа
Одиночная кавычка может быть определена с помощью нотации \x27
:
^[A-Z0-9_+\x27-]+
^^^^
Обратите внимание, что при использовании дефиса в выражении класса символов / скобок при использовании между некоторыми символами он образует диапазон между этими символами. Когда вы использовали ^[A-Z0-9_\+-\x27]+
, вы определили диапазон между +
и '
, который является недопустимым диапазоном, поскольку +
идет после '
в таблице Unicode.
Спасибо Виктору Стрибизью за ответ в своем комментарии.
Есть пара «ошибок» для тех, кто может решить этот вопрос с такой же проблемой. Во-первых, вы должны указать шестнадцатеричное значение (предположительно Unicode), а не значение EBCDIC, которое вы бы использовали, например в обычном интерактивном SQL на IBM i. Так что в данном случае это действительно \ x27, а не \ x7D для апострофа. Предположительно это связано с тем, что функции REGEXP_ ... работают через Unicode даже для данных EBCDIC.
Во-вторых, может показаться, что шестнадцатеричное значение не может быть последним в наборе. Так что это работает:
^[A-Z0-9_\+\x27-]+ ... etc.
Но это не так
^[A-Z0-9_\+-\x27]+ ... etc.
Я не знаю, как выделить текст в примере кода, поэтому обращаю ваше внимание на то, что дефис является последним в первом примере и вторым по последнему во втором.
Если кто-нибудь знает, почему это не должно быть последним, мне было бы интересно узнать. [править: см. ответ Виктора по причине]
Кстати, использование двойных кавычек в качестве разделителя строк с апострофом в наборе не работало в этом контексте.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.