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
这是我们的作业
由于
答案 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