类似于下面的东西可以用来让你请求的输出(我来自哪里抢了ParseString功能着回忆 - 我却用它所有的时间,伟大工程)
CREATE FUNCTION dbo.fnParseString
(
@Section SMALLINT ,
@Delimiter CHAR ,
@Text VARCHAR(MAX)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @NextPos SMALLINT ,
@LastPos SMALLINT ,
@Found SMALLINT
--#### Uncomment the following 2 lines to emulate PARSENAME functionality
--IF @Section > 0
-- SELECT @Text = REVERSE(@Text)
SELECT @NextPos = CHARINDEX(@Delimiter, @Text, 1) ,
@LastPos = 0 ,
@Found = 1
WHILE @NextPos > 0
AND ABS(@Section) <> @Found
SELECT @LastPos = @NextPos ,
@NextPos = CHARINDEX(@Delimiter, @Text, @NextPos + 1) ,
@Found = @Found + 1
RETURN CASE
WHEN @Found <> ABS(@Section) OR @Section = 0 THEN NULL
--#### Uncomment the following lines to emulate PARSENAME functionality
--WHEN @Section > 0 THEN REVERSE(SUBSTRING(@Text, @LastPos + 1, CASE WHEN @NextPos = 0 THEN DATALENGTH(@Text) - @LastPos ELSE @NextPos - @LastPos - 1 END))
WHEN @Section > 0 THEN SUBSTRING(@Text, @LastPos + 1, CASE WHEN @NextPos = 0 THEN DATALENGTH(@Text) - @LastPos ELSE @NextPos - @LastPos - 1 END)
ELSE SUBSTRING(@Text, @LastPos + 1, CASE WHEN @NextPos = 0 THEN DATALENGTH(@Text) - @LastPos ELSE @NextPos - @LastPos - 1 END)
END
END
DECLARE @TestData VARCHAR(255)
SET @TestData = 'business.unit.explored.wrong.way'
SELECT dbo.fnParseString(2, '.', @TestData) ,
dbo.fnParseString(3, '.', @TestData) ,
dbo.fnParseString(4, '.', @TestData) ,
dbo.fnParseString(5, '.', @TestData) ,
dbo.fnParseString(6, '.', @TestData)
可能重复的[删除和分割的数据到选择语句的多个列(http://stackoverflow.com/questions/1735791/remove-and-split-data-into-多列选择语句) –
为什么要扔掉数据的'a.'部分? *全部*数据是否有领先的'a.'?如果不是,你可以显示一些其他的例子,你想如何看待输出? –
当然最好是重新设计并摆脱这一点,你不应该以这种方式对数据进行处理。 – HLGEM