Php SQL Server子字符串循环

Php SQL Server子字符串循环,php,sql-server,substring,Php,Sql Server,Substring,我需要有关子字符串的帮助 列guild\u data包含binary(4000) 我需要从269开始,每40和15个长度得到每个值,直到结束 例如: SELECT DISTINCT CONVERT(VARCHAR,substring(guild_data, 269, 15)) AS name, CONVERT(VARCHAR,substring(guild_data, 309, 15)) AS name1, CONVERT(VARCHAR,subs

我需要有关子字符串的帮助

guild\u data
包含
binary(4000)

我需要从269开始,每40和15个长度得到每个值,直到结束

例如:

SELECT DISTINCT
        CONVERT(VARCHAR,substring(guild_data, 269, 15)) AS name,
        CONVERT(VARCHAR,substring(guild_data, 309, 15)) AS name1,
        CONVERT(VARCHAR,substring(guild_data, 349, 15)) AS name2,
        CONVERT(VARCHAR,substring(guild_data, 389, 15)) AS name3,
    -- so on until it gets till the end...
FROM 
        guild_data
有没有办法更有效地做到这一点

我估计大约有100次重复

  269, 309, 349, 389, 429, 469, 509, 549, 589, 629, 669, 709, 749, 789, 829, 869, 909, 949, 989, 1029, 1069, 1109, 1149, 1189, 1229, 1269, 1309, 1349, 1389, 1429, 1469, 1509, 1549, 1589, 1629, 1669, 1709, 1749, 1789, 1829, 1869, 1909, 1949, 1989, 2029, 2069, 2109, 2149, 2189, 2229, 2269, 2309, 2349, 2389, 2429, 2469, 2509, 2549, 2589, 2629, 2669, 2709, 2749, 2789, 2829, 2869, 2909, 2949, 2989, 3029, 3069, 3109, 3149, 3189, 3229, 3269, 3309, 3349, 3389, 3429, 3469, 3509, 3549, 3589, 3629, 3669, 3709, 3749, 3789, 3829, 3869, 3909, 3949, 3989
多谢各位

我正在寻找一个T-SQL查询。不过,我将在PHP脚本上使用它

----编辑---- 我们将在这里使用这个脚本,它也可以工作。但是太长了:)


以下是CTE使用的示例:

DECLARE @String VARCHAR(4000) = '111111111111111222222222222222333333333333333444444444444444555555555555555'
DECLARE @b VARBINARY(4000) = CONVERT(varbinary(4000),@string)
DECLARE @StartPos int=1
DECLARE @Len tinyint=15
;WITH C (Orig,Startpos,Value) AS (
SELECT @b,@StartPos,CONVERT(VARCHAR,SUBSTRING(@b,@StartPos,@Len))
UNION ALL
SELECT @b,C.Startpos+@Len,CONVERT(VARCHAR,SUBSTRING(@b,C.StartPos+@Len,@Len)) FROM C
WHERE C.Startpos+@Len < = LEN(@b)
)
select C.Value from c
在您的情况下,您应该将@StartPos更改为269,将@Len更改为15

declare @string varchar(4000)
set @string = '111111111111111222222222222222333333333333333444444444444444555555555555555' 
declare @startpos int=1 
declare @len tinyint=15 

declare @t table(data varchar(100))
while len(@string)>15
begin
    insert into @t
    select substring(@string,@startpos,@len)
    select @string=substring(@string,@startpos+15,len(@string))
end
    insert into @t
    select substring(@string,@startpos,@len)
select data from @t

问:有没有办法更有效地做到这一点?A:是的。用SQL以外的任何东西解析字符串。Perl、PHP、C#、VB.Net、Java、Python和Ruby都是合适的选择。使用SQL查询字符串,并使用您选择的语言进行处理。IMHO…为什么列
binary(4000)
包含文本数据???这是一个设计失败,我必须处理它。将它用于php网站。你知道,执行
CONVERT(VARCHAR,…)
将数据转换为30个字符长度的字符串吗?如果需要更多,则需要明确指定
VARCHAR
类型的长度(使用:
CONVERT(VARCHAR(50),…)
或任何适合您需要的内容)
Value
111111111111111
222222222222222
333333333333333
444444444444444
555555555555555
declare @string varchar(4000)
set @string = '111111111111111222222222222222333333333333333444444444444444555555555555555' 
declare @startpos int=1 
declare @len tinyint=15 

declare @t table(data varchar(100))
while len(@string)>15
begin
    insert into @t
    select substring(@string,@startpos,@len)
    select @string=substring(@string,@startpos+15,len(@string))
end
    insert into @t
    select substring(@string,@startpos,@len)
select data from @t