У меня есть строка в базе данных, разделенная запятой. Как «яблоко, банан, ананас, виноград» Мне нужно разбить эту строку на основе запятой и прокрутить ее. Так как в sql-сервере нет встроенной функции, есть ли эффективный способ достижения этой цели.Разделение строки в sql-сервере
ответ
Попробуйте эту функцию
CREATE FUNCTION [dbo].[func_Split]
(
@DelimitedString varchar(8000),
@Delimiter varchar(100)
)
RETURNS @tblArray TABLE
(
ElementID int IDENTITY(1,1), -- Array index
Element varchar(1000) -- Array element contents
)
AS
BEGIN
-- Local Variable Declarations
-- ---------------------------
DECLARE @Index smallint,
@Start smallint,
@DelSize smallint
SET @DelSize = LEN(@Delimiter)
-- Loop through source string and add elements to destination table array
-- ----------------------------------------------------------------------
WHILE LEN(@DelimitedString) > 0
BEGIN
SET @Index = CHARINDEX(@Delimiter, @DelimitedString)
IF @Index = 0
BEGIN
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(@DelimitedString)))
BREAK
END
ELSE
BEGIN
INSERT INTO
@tblArray
(Element)
VALUES
(LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))
SET @Start = @Index + @DelSize
SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
END
END
RETURN
END
Пример - просто передать функции запятыми строку с разделителями, а также в качестве необходимого разделителем.
DECLARE @SQLStr varchar(100)
SELECT @SQLStr = 'Mickey Mouse, Goofy, Donald Duck, Pluto, Minnie Mouse'
SELECT
*
FROM
dbo.func_split(@SQLStr, ',')
Результат будет как этот
Я бы использовал 'SET @DelSize = LEN (@Delimiter + 'x') - 1' to обрабатывать разделители с завершающими пробелами, такими как '' ''и'', ''. –
Вы можете конвертировать ваши данные в формате XML, заменив запятую с помощью пользовательского тега, в этом случае, <w>
слово.
create table t(col varchar(255));
insert into t values ('apple,banana,pineapple,grapes');
insert into t values ('car,bike,airplane');
select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue
from t
Который возвращает
| XMLVALUE |
|--------------------------------------------------------|
| <w>apple</w><w>banana</w><w>pineapple</w><w>grapes</w> |
| <w>car</w><w>bike</w><w>airplane</w> |
Теперь, если вы используете этот запрос в качестве внутреннего XML выберите, внешний запрос может разбить его на отдельные строки:
Решение:
select split.xmlTable.value('.', 'varchar(255)') as xmlValue
from (
select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue
from t
) as xmlTable
cross apply xmlValue.nodes ('/w') as split(xmlTable);
... Так как нет встроенной функции в SQL SERVER ...
Это было верно в то время, вы задали этот вопрос, но SQL Server 2016 представляет STRING_SPLIT
.
Таким образом, вы можете просто использовать
SELECT value
FROM STRING_SPLIT ('apple,banana,pineapple,grapes', ',')
Есть некоторые ограничения (только отдельные разделители характера принимаются и отсутствие какого-либо столбца с указанием индекса разделения будучи наиболее глаз ловить). Различные ограничения и некоторые перспективные результаты тестирования производительности находятся в this blog post by Aaron Bertrand.
- 1. Разделение строки строки
- 2. быстрое разделение строки строки
- 3. разделение строки в as3
- 4. Разделение строки в swift
- 5. Разделение строки в SQL
- 6. Разделение массива в строки
- 7. Разделение строки в AS3
- 8. Разделение строки в куски.
- 9. Разделение строки в разделах
- 10. Разделение нулевого байта Разделение строки UNICODE C
- 11. Разделение строки, затем поиск строки
- 12. Разделение путь строки в C
- 13. Разделение строки в год изменение
- 14. Разделение адресной строки в SQL
- 15. Разделение динамической строки в PHP
- 16. Разделение строки в файле HOCON
- 17. Разделение строки в объединении - группа?
- 18. Разделение длинной строки в C#
- 19. Селективное разделение строки в Perl
- 20. Разделение строки в группах двух
- 21. Разделение сложной строки в R
- 22. Разделение строки разумно в VB.net
- 23. Разделение строки на меньшие строки в C++
- 24. разделение строки на strtok
- 25. Разделение данных из строки
- 26. Разделение строки на подстроки
- 27. Разделение очень большой строки
- 28. Как сделать разделение строки
- 29. C# разделение строки
- 30. perl разделение строки
Какой серверный язык вы используете? – Yani
Проверьте это http://www.queryingsql.com/2013/09/querying-microsoft-sql-server-functions.html – Rohan