在Sql Server中按字母顺序获取以某个字母开头的记录

4
在SQLSERVER/MSSQL中,这是问题:
SELECT * from [Translation Color] order by [Language Code] 

我想按字母顺序排列记录,以'I'字母开头。

结果示例:

'Ioren' 'Iumen' 'Tart' 'Arfen' 'Coldry'

我不想使用union或更多的SQL语句..只需尝试使用特殊的order by子句捕获它。

我已经尝试过:

ORDER BY <field> REGEXP '^I' DESC

但是它没有起作用。

有任何想法吗?

3个回答

3
这应该可以完成任务。
ORDER BY CASE WHEN SUBSTRING([Translation Color],1,1) = 'l' 
     THEN 1 ELSE 0 END DESC

编辑:

完整的答案是:从i开始完全排序,然后循环回到h:

ORDER BY CASE WHEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) < 73 
         THEN ASCII(UPPER(SUBSTRING([Translation Color],1,1))) + 26
         ELSE ASCII(UPPER(SUBSTRING([Translation Color],1,1))) END ASC,       
         [Translation Color] ASC

请注意,这会影响大型表的性能。

请记得检查性能是否可接受,特别是如果您拥有或可能拥有大型数据集。 - Neil Barnwell
抱歉,我正在使用C#编程,但我已经编辑过了,应该是正确的了。 - cjk
顺便说一句 - 非常聪明的解决方案 - 非常好! - Neil Barnwell
@Dog Ears:看到[==会出错,但是只用一个=就可以了!谢谢 - avastreg(49分钟前)] - cjk
我可能没理解到重点,但你是不是想要数据按照这样的顺序排列:l m n o....g h i j k?所选答案是否能实现这个效果? - Dog Ears
@Dog Ears,你说得对。OP建议他们需要I-ZA-H的排序方式。ck的答案没有提供这个,而你和我都有。请注意,它是一个I(i),不是一个l(L)。 - LukeH

2

或者这个更好:

select [Translation Color], 
  case when [Translation Color] < 'l' then 1
                     else 0 
                     end as Priority
from t1 
order by Priority, [Translation Color]

这将按字母顺序排序,从“l”开始

编辑 这个解决方案对我有效:

create table t1 ( c1 varchar(20) collate SQL_Latin1_General_Cp437_CI_AS)

然后我填充了一些测试数据,然后运行了这个:

select c1 
from t1 
order by case when c1 >= 'l' then 0 else 1 end, c1

+1:很好的答案,非常干净,但在选择语句中使用了单独的元素。 - cjk
我的编辑功能完美运行,但没有使用 order by 子句。 - Dog Ears
现在使用order by子句(而不是不使用)! - Dog Ears

2
SELECT *
FROM [Translation Color]
ORDER BY
    CASE WHEN [Language Code] LIKE '[I-Zi-z]%' THEN 0 ELSE 1 END,
    [Language Code]

+1:回答不错,但是在大数据集上,LIKE子句可能会非常慢,但可能没有我的慢(不过我假设这是一个小查找表)。 - cjk
@ck,虽然LIKE不是最理想的选择,但它仍然可以使用[Language Code]列上的任何索引。我怀疑使用SUBSTRING、ASCII、UPPER等函数会导致全表扫描。 - LukeH
@ck,我同意这很可能是一个小查找表。然而,即使每一点性能都不是至关重要的,我认为我的答案比所有那些字符串函数更易读。 - LukeH
你的答案确实更易读。我喜欢这个问题有三个不同的答案。 - cjk
我喜欢这个答案,因为我想象它对不同的排序方式更加宽容。 - Dog Ears

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接