Oracle REGEXP_LIKE и значение \ A и \ Z - PullRequest
2 голосов
/ 08 июля 2011

Я наткнулся на код, подобный следующему в хранимой процедуре Oracle:

SELECT * FROM hr.employees WHERE REGEXP_LIKE(FIRST_NAME, '\A'||:iValue||'\Z', 'c');

И я не уверен, что делают \ A и \ Z.

Из того, что я могу почерпнуть из документации Oracle, я думаю, что они просто подавляют значение специальных символов в параметре iValue. Если это так, вышеуказанное должно быть эквивалентно

SELECT * FROM hr.employees WHERE FIRST_NAME=:iValue;

Кто-нибудь может это подтвердить? Эмпирически это похоже на случай.

Я думаю, что в прошлом они хотели поиск без учета регистра, поэтому «c» раньше был «i». Поэтому в этом случае нам больше не нужно использовать функцию REGEXP_LIKE, и мы можем заменить ее на равно.

Ответы [ 2 ]

1 голос
/ 08 июля 2011
  • \A соответствует позиции в начале строки.
  • \Z соответствует позиции в конце строки или перед новой строкой в ​​концестроки.
  • \z соответствует позиции в конце строки.

Они не зависят от многострочного режима, в отличие от ^ и $.

Пример:

foo\Z будет соответствовать foo\n, ноfoo\z будет не совпадать с foo\n.

См. Ссылка на Oracle .


, если || используется для строкиконкатенация, то это не то же самое, что простое сравнение строк, так как это позволит вам использовать регулярные выражения.(Также я не уверен, как Oracle обрабатывает чувствительность к регистру при использовании =, MySQL игнорирует регистр по умолчанию при сравнении строк.)

0 голосов
/ 08 июля 2011

\A соответствует самому началу ввода.
\Z соответствует самому концу ввода.

Проверьте регулярные-выражения.info , что является отличнымрегулярное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...