хранимая процедура mySQL для разделения строк по разделителю - PullRequest
2 голосов
/ 18 декабря 2009

Я пишу хранимую процедуру, которая взрывает переданную строку передал разделитель и возвращает n-й элемент результата. п пройдено тоже.

Так вот что я придумал:

CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255))
BEGIN

  SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter, nPartToGet),
    length(substring_index(strToSplit,strDelimiter, nPartToGet - 1)) + 1), strDelimiter, '')

END
;

К сожалению, mysql продолжает настаивать на том, что у меня там есть синтаксическая ошибка. ИМХО это должно работать. Кто-нибудь может подсказать мне, где я иду не так?

спасибо заранее

  K

1 Ответ

2 голосов
/ 18 декабря 2009

Вам необходимо завершить ваш SET с помощью ';' и, учитывая, что клиент интерпретирует; в качестве разделителя вам необходимо изменить разделитель, чтобы вы могли ввести фактическое значение; в процедуру.

mysql> delimiter //
mysql> CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255))
    -> BEGIN
    -> SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter,
    -> nPartToGet),     length(substring_index(strToSplit,strDelimiter, 
    -> nPartToGet - 1)) + 1), strDelimiter, '');
    -> END
    -> //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> CALL SPLIT('1;2;3;4;5',';',3,@str);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @str;
+------+
| @str |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

Соответствующие документы: http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html

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