如何对SQL表中单个单元格的单词进行排序?

0 sql t-sql sql-server string-parsing sql-server-2016-express

例如:

  • 公寓中的支柱 101
  • 祖祖杜尔加国际酒店
  • 温德姆花园新鲜草地酒店

需要将上面的排序为,

  • 101 栋位于 Pillars 的公寓
  • 杜尔加国际祖祖酒店
  • 温德姆新鲜花园草地酒店

Shn*_*ugo 6

尝试这个:

DECLARE @tbl TABLE(YourString VARCHAR(100));
INSERT INTO @tbl VALUES
 ('Pillars 101 in an apartment')
,('Zuzu Durga International Hotel')
,('Wyndham Garden Fresh Meadows');

SELECT CAST('<x>' + REPLACE((SELECT YourString AS [*] FOR XML PATH('')),' ','</x><x>') + '</x>' AS XML).query
('
    for $x in /x
    order by $x
    return
    concat($x/text()[1], " ")   
').value('.','varchar(max)')
FROM @tbl; 
Run Code Online (Sandbox Code Playgroud)

该代码将首先以 XML 格式传输您的文本,例如<x>Pillars</x><x>101</x> ....
然后使用 aFLWOR XQuery返回排序后的文本部分。
最后一次调用.value()将再次将排序后的片段作为文本返回。

结果

101  Pillars  an  apartment  in 
Durga  Hotel  International  Zuzu 
Fresh  Garden  Meadows  Wyndham 
Run Code Online (Sandbox Code Playgroud)

最后声明

这段代码是一种练习。你的设计真的很糟糕,应该改变......