Как разделить данные в SQL Server 2008 по длине, а не по разделителю - PullRequest
0 голосов
/ 01 марта 2010

У меня есть запрос для разделения данных, но он основан на разделителе. Мой запрос:

DECLARE @xml xml,@str varchar(100),@delimiter varchar(10)
SET @str= 'VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR'
SET @delimiter =','
SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
select @xml
SELECT a.value('.','varchar(10)') as value FROM @xml.nodes('X') as X(a)

Я хочу разделить данные по длине, т.е. 10 символов.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Что-то вроде ... (Редактировать: теперь разделитель безопасен)

DECLARE @str varchar(100)
DECLARE @splitlen tinyint, @hasSeparator bit;

SELECT @str= 'VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR,VINAYKUMAR'
SELECT @splitlen = 10, @hasSeparator = 1

;WITH cNumber AS 
(
    SELECT
        ROW_NUMBER() OVER (ORDER BY C1.column_id) * (@splitlen+@hasSeparator) - @splitlen + (1-@hasSeparator) AS Number
    FROM
        sys.columns C1, sys.columns C2
)
SELECT
    SUBSTRING(@str, Number, @splitlen-@hasSeparator)
FROM
    cNumber
WHERE
    Number < LEN (@str)



SELECT @str= 'VINAYKUMARVINAYKUMARVINAYKUMARVINAYKUMARVINAYKUMARVINAYKUMARVINAYKUMAR'
SELECT @splitlen = 10, @hasSeparator = 0
;WITH cNumber AS 
(
    SELECT
        ROW_NUMBER() OVER (ORDER BY C1.column_id) * (@splitlen+@hasSeparator) - @splitlen + (1-@hasSeparator) AS Number
    FROM
        sys.columns C1, sys.columns C2
)
SELECT
    SUBSTRING(@str, Number, @splitlen - @hasSeparator)
FROM
    cNumber
WHERE
    Number < LEN (@str)
1 голос
/ 01 марта 2010

Использование SUBSTRING

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...