Sql server 如何在SQL server 2008中基于长度而非分隔符拆分数据

Sql server 如何在SQL server 2008中基于长度而非分隔符拆分数据,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我有一个用于分割数据的查询,但它基于分隔符。我的问题是: 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 ,

我有一个用于分割数据的查询,但它基于分隔符。我的问题是:

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个字符)分割数据


提前感谢。

使用类似于。。。编辑:现在安全了吗

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)

当数据中存在分隔符时,我们可以使用上面的。。。但是我需要根据大小来分割数据,即10@str='vinaykumarvinaykumarvinaykumarvinaykumarvinaykumarvinaykumarvinaykumarvinaykumar'@VinnaKanna:你的例子没有提到这一点。我的解决方案也基于长度,但非常感谢您。。。。但是上面查询中的问题需要花费更多的时间…您能解释一下使用out sys.columns获得相同结果的其他方法吗。。。但是,谢谢你,请创建一个基本数字表