Flower@12 Ответов: 1

Я хочу создать функцию разделения в sqll как ее создать


Я хочу создать функцию разделения в sqll .Но код показывает следующую ошибку

Msg 8116, Уровень 16, состояние 1, процедура fnSplit, строка 13
Аргумент тип данных varchar является недопустимым для 2 аргумента в функцию substring.

Что я уже пробовал:

Микод здесь

Создать функцию fnSplit
(
@x VARCHAR(255),
@delim VARCHAR(12),
@pos INT
)
ВОЗВРАЩАЕТ NVARCHAR(500)

НАЧАТЬ
Объявить @Rtntxt NVARCHAR(500);
SET @Rtntxt=";
Набор @Rtntxt=заменить(подстрока(@х, @делим, @пос), (лен(подстрока(@х, @делим, @пос - 1)+ 1)), @делим);
RETURN @Rtntxt;
КОНЕЦ

1 Ответов

Рейтинг:
12

OriginalGriff

В принципе, это плохая идея - это против первой нормальной формы иметь неатомные элементы в вашей БД, и именно с этим эта функция должна помочь. И они всегда приносят гораздо больше горя, чем экономят время, поэтому перепроектирование вашей базы данных для их удаления всегда является гораздо лучшим решением, чем тратить время на их разборку.

Сказав это, сообщение об ошибке очень ясно:

Argument data type varchar is invalid for argument 2 of substring function.

Быстрый взгляд на документацию по ПОДСТРОКАМ: Функция SQL Server SUBSTRING() [^] показал бы вам, что параметр 2 должен быть числом, а не строкой-разделителем.

SQL имеет - в лучшем случае - плохую обработку строк, что является одной из причин того, что хранение неатомных данных в строках в БД-очень плохая идея. Но это возможно: Использование разделенных запятыми строк параметров значений в предложениях SQL IN[^] или Преобразование данных, разделенных запятыми в столбце, в строки для выбора[^] может помочь вам разорвать веревку.