В хранимой процедуре я использую CONCAT с числами, преобразованными в строки, и буквой алфавита. Это выдает ошибку, и когда я удаляю букву или меняю букву на числовое значение, все идет хорошо:
Соответствующие части процедуры:
Код: Выделить всё
DECLARE sReturnValue char(10) DEFAULT "";
.... coding ....
select (@curYear \* 100000) + 1 into @inv_invnr; -- numeric value
select "G" into @sInvPrefix; -- string value
select CONVERT(@inv_invnr, CHAR) into sReturnValue; -- string value to be used in concat
return CONCAT(left(sReturnValue,4), @sInvPrefix, right(sReturnValue,4)) ;
Код ошибки: 1265. Данные усекаются для столбца «имя сохраненного процесса» в строке 1.
Когда я меняю sInvPrefix на «0» (ноль), все работает нормально.
Итак, похоже, что CONCAT игнорирует тип sReturnValue и делает его числовым, что конфликтует с буквой «G» в sInvPrefix.
Я использовал Convert, Cast и всевозможные композиции синтаксиса, но это не сработало. Когда я пробую concat в своей рабочей среде MYSQL как прямую команду со строками, все идет хорошо:
Код: Выделить всё
select CONCAT(left("202500001",4), "A", right("202500001",4)) ; -- is ok
select (CONCAT("123", "A", "456")); -- is ok
Подробнее здесь: https://stackoverflow.com/questions/798 ... to-numbers
Мобильная версия