SQL按字典顺序排序,但首先使用较长的字符串

Art*_*hez 1 t-sql sql-server sql-order-by

在SQL Server中,我有一个表格,其中包含我要排序的列.如果我按照惯例应用ORDER BY,它按预期执行以下操作:

banana
bananaphone
car
carpet
dishes
//etc
Run Code Online (Sandbox Code Playgroud)

但是,我想让它们以另一种方式排序:

bananaphone
banana
carpet
car
dishes
//etc
Run Code Online (Sandbox Code Playgroud)

按字典顺序排列,但如果字母匹配且一个字母长于另一个字母,请将较长的字母放在第一位.

是否可以在T-SQL中进行此类查询?

我甚至不知道这种排序算法是否有名称,我找不到它.

请注意,这篇文章中的数据只是一个例子,我将存储用户定义的数据.

Nat*_*erl 6

这似乎有效:

declare @YourTable table (YourColumn varchar(100));
insert into @YourTable

select 'bananaphone' union all
select 'banana' union all
select 'carpet' union all
select 'car' union all
select 'dishes' union all
select 'carpet' union all
select 'cars' union all
select 'CARP'

select  YourColumn
from    @YourTable
order
by      YourColumn+replicate(char(255), 100-len(YourColumn));
Run Code Online (Sandbox Code Playgroud)

  • @NathanSkerl这是一个很棒的技术,但如果单词中的字符在'x'之后(即y和z),它将无法正确排序.我建议使用最高的ASCII字符,例如`s by s + replicate(CHAR(255),100-len(s))` (3认同)