Я хочу разделить «1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ...» (разделенные запятыми) в таблицу или переменную таблицы ,
У кого-нибудь есть функция, которая возвращает каждую подряд?
sql
sql-server
tsql
sql-server-2008
jinsungy
источник
источник
Ответы:
Вот несколько старомодное решение:
В SQL Server 2008 вы можете добиться того же с помощью кода .NET. Возможно, это сработало бы быстрее, но определенно таким подходом управлять легче.
источник
Попробуй это
ИЛИ
Здесь можно найти еще много способов сделать то же самое. Как разбить строку с разделителями-запятыми?
источник
<
,>
или&
(например, input представляет собой последовательность целых чисел). Любой из трех вышеупомянутых символов вызовет ошибку синтаксического анализа вместо ожидаемого результата.SELECT b, CHARINDEX(@delimiter, @str, b) + LEN(@delimiter)
должна быть на самом делеSELECT b, CHARINDEX(@delimiter, @str, b+1) + LEN(@delimiter)
. Ь + 1 имеет большое значение. Протестировано здесь с пробелом в качестве разделителя, без этого исправления не работало.MAXRECURSION
возможность разделить более 100 частей, заменитьLEN
чем-то из stackoverflow.com/q/2025585 для обработки пробелов и исключитьNULL
строки дляNULL
входных данных.Вы отметили этот SQL Server 2008, но будущие посетители этого вопроса (использующие SQL Server 2016+), вероятно, захотят узнать об этом
STRING_SPLIT
.С помощью этой новой встроенной функции теперь вы можете просто использовать
Некоторые ограничения этой функции и некоторые многообещающие результаты тестирования производительности приведены в этом сообщении в блоге Аарона Бертрана .
источник
Это больше всего похоже на .NET для тех из вас, кто знаком с этой функцией:
источник
вот функция разделения, которую вы спросили
выполнить такую функцию
источник
Источник этого ответа: http://sqlhint.com/sqlserver/how-to/best-split-function-tsql-delimited
источник
Я хочу втиснуть свое любимое решение. Итоговая таблица будет состоять из 2 столбцов: PosIdx для позиции найденного целого числа; и значение в целых числах.
Он работает с использованием рекурсивного CTE в качестве списка позиций, по умолчанию от 1 до 100. Если вам нужно работать со строкой длиннее 100, просто вызовите эту функцию с помощью option (maxrecursion 4000), как показано ниже:
источник
использование
источник
Этот простой CTE даст то, что нужно:
источник
Это еще одна версия, которая действительно не имеет никаких ограничений (например: специальные символы при использовании подхода xml, количество записей в подходе CTE), и она работает намного быстрее на основе теста на 10M + записях со средней длиной исходной строки 4000. Надеюсь на это может помочь.
источник
Используя таблицу подсчета, здесь используется одна функция разделенной строки (наилучший возможный подход) Джеффа Модена
По рекомендации Tally OH! Улучшенная функция SQL 8K «Разделитель CSV»
источник
В этом блоге было довольно хорошее решение, использующее XML в T-SQL.
Это функция, которую я придумал на основе этого блога (измените имя функции и приведение типа результата при необходимости):
источник
источник
источник
Вы пишете эту функцию в sql server после того, как эта проблема будет решена.
http://csharpdotnetsol.blogspot.in/2013/12/csv-function-in-sql-server-for-divide.html
источник