在SQL SERVER 2005中提取字符?

时间:2010-01-11 02:34:31

标签: sql-server-2005 tsql

extracting the values from vvv.www.xxx.yyy.zzz

的最佳方式是什么?

请注意,vvv或www或xxx或yyy或zzz可能会有所不同,即它可以是任意长度。

因此我无法使用substring with charindex

我不想用LOOP或CURSOR这样做。通过使用CTE和数字表也可以完成,但这将是一个有点冗长的程序。

任何简单的1行程序都可以实现相同的目标。

所需的输出将是

Col1 Col2 Col3 Col4 Col5

vvv  www  xxx   yyy   zzz

这是我们的作业

由于

1 个答案:

答案 0 :(得分:0)

可以使用带有CHARINDEX的SUBSTRING,只需要多做一些工作:

declare @s as varchar(25)
set @s = 'vvv.www.xxx.yyy.zzz'
select 
left(@s, charindex('.', @s) - 1) as col1,
substring(@s, charindex('.', @s) + 1, charindex('.', @s, charindex('.', @s) + 1) - charindex('.', @s) - 1) as col2,
substring(@s, charindex('.', @s, charindex('.', @s) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - charindex('.', @s, charindex('.', @s) + 1) - 1) as col3,
substring(@s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1, charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) - charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) - 1) as col4, 
right(@s, len(@s) - charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1)) as col5

你可以用这样的连接来清理它:

declare @s as varchar(25)
set @s = 'vvv.www.xxx.yyy.zzz'
select left(@s, first - 1) as col1,
    substring(@s, first + 1, second - first - 1) as col2,
    substring(@s, second + 1, third - second - 1) as col3,
    substring(@s, third + 1, fourth - third - 1) as col4,
    right(@s, len(@s) - fourth)
from (select @s s) a
inner join
(
    select charindex('.', @s) as first,
    charindex('.', @s, charindex('.', @s) + 1) as second,
    charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) as third,
    charindex('.', @s, charindex('.', @s, charindex('.', @s, charindex('.', @s) + 1) + 1) + 1) as fourth
) b on 1=1