简单CROSS APPLY可以帮助在这里。
请注意,我用我自己的XML解析器,因为它是 “XML安全”
Declare @YourTable table ([COLUMN 1] varchar(max))
Insert Into @YourTable values
('ABC ABCD'),
('BC BCDE'),
('9II IIIIV')
Select A.[COLUMN 1]
,Result = B.RetVal
From @YourTable A
Cross Apply (
Select Top 1 *
From (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(A.[COLUMN 1],' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B1
Order by Len(RetVal) Desc,RetSeq
) B
返回
COLUMN 1 Result
ABC ABCD ABCD
BC BCDE BCDE
9II IIIIV IIIIV
编辑 - 要显示纽带
Declare @YourTable table ([COLUMN 1] varchar(max))
Insert Into @YourTable values
('ABC ABCD'),
('BC BCDE 1234'),
('9II IIIIV')
Select A.[COLUMN 1]
,Result = B.RetVal
From @YourTable A
Cross Apply (
Select Top 1 with ties *
From (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(A.[COLUMN 1],' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B1
Order by Dense_Rank() over (Order by Len(RetVal) Desc)
) B
退货
COLUMN 1 Result
ABC ABCD ABCD
BC BCDE 1234 BCDE --<< Tie
BC BCDE 1234 1234 --<< Tie Added for Illustration
9II IIIIV IIIIV
你对领带做什么? – SqlZim
@SqlZim好点。我会留意OP的回应。 –
@JohnCappelletti我只是好奇。已经提高了您的答案,因为无论答案如何,这都将是一个小调整。 – SqlZim