SQL 按字典顺序排序,但较长的字符串在前
SQL Order by lexicographical order, but with longer string first
在 SQL 服务器中,我有一个 table,其中包含我要排序的列。如果我应用通常的 ORDER BY
,它会按预期执行以下操作:
banana
bananaphone
car
carpet
dishes
//etc
但是,我希望以其他方式对它们进行排序:
bananaphone
banana
carpet
car
dishes
//etc
仍然是字典顺序,但如果字母匹配并且一个比另一个长,则将较长的放在前面。
是否可以在 T-SQL 中进行这样的查询?
我什至不知道这个排序算法有没有名字,我找不到。
请注意post中的数据只是一个示例,我将存储用户定义的数据。
这似乎有效:
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));
在 SQL 服务器中,我有一个 table,其中包含我要排序的列。如果我应用通常的 ORDER BY
,它会按预期执行以下操作:
banana
bananaphone
car
carpet
dishes
//etc
但是,我希望以其他方式对它们进行排序:
bananaphone
banana
carpet
car
dishes
//etc
仍然是字典顺序,但如果字母匹配并且一个比另一个长,则将较长的放在前面。
是否可以在 T-SQL 中进行这样的查询?
我什至不知道这个排序算法有没有名字,我找不到。
请注意post中的数据只是一个示例,我将存储用户定义的数据。
这似乎有效:
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));