明凯博客

关注网站技术,一个特立独行的程序员

SQL对汉字月份进行排序的两种方法

有时候进行排序的时候,需要对汉字进行排序,可是默认的order by 是按ASCII码排序。

所以没法对汉字进行排序。
比如下面的例子:

一月,五月,四月,十月,十一月,十二月,三月,七月,六月,九月,二月,八月

常规的语句是这样的:

1
SELECT MONTH FROM aa ORDER BY MONTH

这样子是结果都是乱的。

明凯在这里想到了两种方法来进行解决:

第一种方法:
将汉字用函数自定义数字。这样排序排的就是数字了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT MONTH
FROM aa ORDER BY CASE MONTH  
WHEN '一月' THEN 1
WHEN '二月' THEN 2
WHEN '三月' THEN 3
WHEN '四月' THEN 4
WHEN '五月' THEN 5
WHEN '六月' THEN 6
WHEN '七月' THEN 7
WHEN '八月' THEN 8
WHEN '九月' THEN 9
WHEN '十月' THEN 10
WHEN '十一月' THEN 11
WHEN '十二月' THEN 12
ELSE 99 END

这样子是可以的。

第二种方法:

通过CHARINDEX函数来排序。

在SQL中,CHARINDEX函数常常用来在一段字符中搜索字符或者字符串。

1
2
3
4
SELECT MONTH 
FORM  aa
ORDER BY  
CHARINDEX (MONTH,'一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月')

这里就不介绍CHARINDEX函数了。
但是charindex为SQL Server函数,Oracle中使用函数instr。

, , ,

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注