sql语句实现按顺序排序而不是拼音首字母排序

sql语句排序能不能按顺序排,而不是按拼音首字母排啊,比如说全数字的话是1 2 3 4 5 11 12而不是1 11 12 2 3 4 5
再比如说如图,先是康乐一区,康乐二区,康乐三区,而不是按拼音排,一区在后面了

img

那你只有把中文的一,二这些替换成数字1,2这些再排序了
或者是:

select * fromorder by charindex(SUBSTRING(字段,3,1),'⼀⼆三四五六七⼋九⼗') 

不过这个有一个限制,就是必须第三个字符必须是中文的一,二这些

一般来说做这类需求都是需要一个排序列,最好不要用汉字排序。

https://blog.csdn.net/bigheadsheep/article/details/7722491

SELECT RbLyName,CASE
           WHEN SUBSTRING(RbLyName,1,4)==“康乐一区” THEN 1
           WHEN SUBSTRING(RbLyName,1,4)==“康乐二区” THEN 2
           WHEN SUBSTRING(RbLyName,1,4)==“康乐二区” THEN 3
           WHEN SUBSTRING(RbLyName,1,4)==“康乐二区” THEN 4
           WHEN SUBSTRING(RbLyName,1,4)==“康乐二区” THEN 5
           ELSE 99
           END AS xu
FROM T_YhInfo
WHERE XqNuame='康乐小区'
ORDER BY xu

存的是中文的话,sql没法办到,除非你有另外的字段进行排序

select * from b order by nlssort(b.name,'NLS_SORT=SCHINESE_STROKE_M') ;

img

正常工作中不会遇到这样的情况的,如果有可以设置自定义函数udtf

WITH T1 AS (SELECT '康乐街1区' name union
SELECT '康乐街11区' name union
SELECT '康乐街12区' name union
SELECT '康乐街13区' name union
SELECT '康乐街2区' name union
SELECT '康乐街3区' name union
SELECT '康乐街4区' name union
SELECT '北京院1区' name union
SELECT '北京院13区' name )

SELECT name,cast(regexp_replace(name,'[^0-9]','') as decimal)
FROM T1
order by cast(regexp_replace(name,'[^0-9]','') as decimal)