Есть большая таблица с названиями улиц. Мне необходима выбрать из нее только те, которые содержат дефис и названия, например "Тверская-Ямская 1-я".
Я составляю запрос:
SELECT * FROM tbl_name WHERE street REGEXP '/^[А-Яа-я]+\-[А-Яа-я]+\s[0-9]+[-я]+/ui'
Результатом должно быть примерно такая таблица:
+------+---------------------+
| id | street |
+------+---------------------+
| 5 | Тверская-Ямская 1-я |
| 6 | Тверская-Ямская 2-Я |
| 7 | Тверская-Ямская 3-Я |
| 4 | Тверская-Ямская 4-Я |
+------+---------------------+
Но в моем случае результат пуст.
Я попробовал проделать то же самое в php:
preg_match('/^[А-Яа-я]+\-[А-Яа-я]+\s[0-9]+[-яЯ]+/ui', 'Тверская-Ямская 1-я', $matches);
И я вижу результат:
Array
(
[0] => Тверская-Ямская 1-я
)
Подскажите, пожалуйста, в чем моя ошибка?
Спасибо!
Попробуйте изменить условие отбора следующим образом:
WHERE street REGEXP '[а-я]+-[а-я]+ [0-9]+[-я]'
Регулярные выражения в MySQL
У вас не работает т к используются не допустимые символы для sql регулярных выражений, такие как "/ /ui","\s". Вы могли бы обойтись и без регулярных выражений, напирмер оператором LIKE:
SELECT * FROM tbl_name WHERE street "%-% %-%"
Сборка персонального компьютера от Artline: умный выбор для современных пользователей