【问题标题】:SQL Order by lexicographical order, but with longer string firstSQL 按字典顺序排序,但首先使用较长的字符串
【发布时间】:2015-04-16 21:48:10
【问题描述】:

在 SQL Server 中,我有一个表,其中包含要排序的列。如果我应用通常的ORDER BY,它会按预期执行以下操作:

banana
bananaphone
car
carpet
dishes
//etc

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

bananaphone
banana
carpet
car
dishes
//etc

仍然按字典顺序排列,但如果字母匹配并且一个比另一个长,则将较长的放在第一位。

是否可以在 T-SQL 中进行这样的查询?

我什至不知道这个排序算法有没有名字,我找不到。

请注意,本文中的数据只是一个示例,我将存储用户定义的数据。

【问题讨论】:

    标签: sql-server tsql sql-order-by


    【解决方案1】:

    这似乎有效:

    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));
    

    【讨论】:

    • @NathanSkerl 这是一项很棒的技术,但是如果单词中的字符在“x”之后(即 y&z),它将无法正确排序。我建议使用像这样的最高 ASCII 字符 order by s+replicate(CHAR(255), 100-len(s))
    • @John,是的,考虑到这一点,这个解决方案对我有用
    • @John 是的,好点。 50 的长度也可能会受到限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2018-05-29
    • 2022-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多