簡單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