powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / REGEXP, подпрограммы и переменные в них
4 сообщений из 4, страница 1 из 1
REGEXP, подпрограммы и переменные в них
    #40099721
Привет.
Есть простейшая таблица `uved` со следующими полями:

Код: plaintext
1.
2.
3.
4.
--------------------------------
| id_uved | id_cod | user_send |
--------------------------------
|    1    |  878   | q2        |
-------------------------------- 

Требуется через подпрограмму Mysql выяснить с помощью регулярного выражения, передав подпрограмме параметр (st), есть ли совпадение.
Делаю подпрограмму `subs`:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
DELIMITER $$
CREATE DEFINER=`cods`@`localhost` FUNCTION `subs`(`st` INT(10)) RETURNS int(10)
    NO SQL
RETURN (SELECT id_cod FROM uved 
        WHERE uved.user_send 
        REGEXP '^'+st
)$$
DELIMITER ;


Делаю запрос:

Код: sql
1.
SELECT subs(2) as tmp



Результат: возврат id_cod, т.е. 878. А ожидаю NULL.
Я никак не могу понять, почему игнорируется символ начала строки '^' ?
Причем если делать такой же запрос к таблице без подпрограммы напрямую, то все работает...

Код: sql
1.
2.
3.
SELECT id_cod FROM uved 
        WHERE uved.user_send 
        REGEXP '^2'



Возвращает NULL.

Что я упускаю? Всю голову уже сломал...
...
Рейтинг: 0 / 0
REGEXP, подпрограммы и переменные в них
    #40099724
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Мальцев
Что я упускаю?

Справку не читал. Плюс - это оператор арифметический, числа складывать. А для конкатенации строк существует специально прикормленная функция CONCAT().

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE DEFINER=`cods`@`localhost` 
FUNCTION `subs`(`st` INT(10)) 
RETURNS int(10)
NO SQL
RETURN (SELECT id_cod 
        FROM uved 
        WHERE uved.user_send REGEXP CONCAT('^', st) LIMIT 1);



LIMIT 1 обязателен - иначе, если запрос вернёт более одной строки, это приведёт к ошибке. И, по-хорошему, ещё и ORDER BY там нужен - чтобы при нескольких строках получать какую-то определённую, а не случайно под руку попавшуюся.

И DELIMITER для однооператорной функции не нужен.
...
Рейтинг: 0 / 0
REGEXP, подпрограммы и переменные в них
    #40099727
Хм... По REGEXP все прочитал. Обычно со справки и начинаю. Подставить переменную, сделал по аналогии в java...

Понял ошибку. Сейчас попробую. Спасибо.
...
Рейтинг: 0 / 0
REGEXP, подпрограммы и переменные в них
    #40099732
Да, все получилось.
Весь вечер вчера просидел, до психа. Было подозрение, что как-то не так подставляю переменную.

DELIMITER - почему-то phpMyAdmin подставляет сам.

LIMIT и ORDER BY, в моем случае не требуется.
Идет обращение к конкретной строке. Но остальным наука будет. :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / REGEXP, подпрограммы и переменные в них
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]