Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 STRING_SPLIT для 2008  [new]
ssms
Member

Откуда:
Сообщений: 191
Доброе утро.

Подскажите пожалуйста, как разбить строку по символу разделителю и получить например 10-е значение?

Аналог STRING_SPLIT нуден.


Но STRING_SPLIT появился намного позднее 2008-го в sql server (
20 фев 21, 10:02    [22283928]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20960
Ну рекурсивный CTE никто ж не отменил... откусывайте по одному фрагменту, пока остаток не станет пустым... ну и, само собой, сохраняйте номер фрагмента.

Сообщение было отредактировано: 20 фев 21, 10:02
20 фев 21, 10:08    [22283929]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
ssms,

поищите CLR варианты в инете, при минимальном знании C# можно и самому сделать.
20 фев 21, 10:12    [22283931]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
ssms
Member

Откуда:
Сообщений: 191
Спасибо. Жаль нет стандартного решения.
20 фев 21, 10:23    [22283940]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
uaggster
Member

Откуда:
Сообщений: 954
ssms
Спасибо. Жаль нет стандартного решения.

Если просто чтобы работало, забив на производительность:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- Разворачивает строку, разделенную @separator в столбец
CREATE function [dbo].[fnSplitString] 
(
    @str nvarchar(max), 
    @separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS (
    select 
        cast(1 as bigint), 
        cast(1 as bigint), 
        charindex(@separator, @str)
    union all
    select
        p + 1, 
        b + 1, 
        charindex(@separator, @str, b + 1)
    from tokens
    where b > 0
)
select
    p-1 ItemIndex,
    substring(
        @str, 
        a, 
        case when b > 0 then b-a ELSE LEN(@str) end) 
    AS Item
from tokens
);

GO
20 фев 21, 11:10    [22283973]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 47049
Функция, которая делит строку на слова
20 фев 21, 11:52    [22283999]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
max44
Member

Откуда: МОСКВА
Сообщений: 279
ищем iter_charlist_to_table
5.2. Список string элементов

https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml#tblnum
20 фев 21, 12:25    [22284014]     Ответить | Цитировать Сообщить модератору
 Re: STRING_SPLIT для 2008  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
ssms,

использование CLR функций для обработки строк как раз и является "стандартным решением", если нет встроенных функций аналогичного назначения.
20 фев 21, 16:12    [22284146]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить