mysql语句 字符字段,先数字后字母排序以及汉字排序。

第一个排序.字符型字段,有数字,有字母。

         现在对type_code字段进行排序,如下:

MYSQL语句进行排序:

SELECT *,  (type_code+0 > 0) boolNum 
FROM table 
ORDER BY boolNum DESC, (type_code+0), type_code;

效果如下:

具体原理我也不知道,反正网上抄了半天,抄到个可以用的。

第二个汉字排序:对如下BASE_RULE_NAME进行排序:

MYSQL语句,BASE_RULE_NAME(这个字段得注意修改成自己的):

SELECT *,lower(case when BASE_RULE_NAME REGEXP '^[a-zA-Z]' then LEFT(BASE_RULE_NAME, 1)
        when BASE_RULE_NAME REGEXP '^[0-9]' then LEFT(BASE_RULE_NAME, 1)
        else ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(BASE_RULE_NAME USING gbk),1)),16,10),
                        0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
                        0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,
                        0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
                        'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P',
                        'Q','R','S','T','W','X','Y','Z') end) firstChar
        FROM table ORDER BY firstChar ASC,BASE_RULE_NAME ASC;

效果图,按照第一个汉字的首字母排序的: