mysql實現數字》字母》中文》特殊字元排序

2021-09-23 06:08:50 字數 712 閱讀 3650

大產品就是有這麼個需求,還是將name varchar(10) 的字串按從左到右逐字進行大小匹配的,如:02,003,按從左到右匹配,就是 003需要排在02前面。

mysql 正常的order by是按 ascii碼 進行排序的,數字》字母》中文,這是正常排序,用order by就能實現;但特殊字元就比較特殊了,非字母數字中文就都是特殊字元;所以,需要做一通亂腦子的處理;

示例:

select *, ( case when hex(pos) not regexp

'[46][1-9]|[357][0-9]|[46][a-f]|[57]a|e[4-9][0-9a-f]' then pos end

) as sort from user order by sort, pos

解釋1:匹配到非字母數字中文的內容,做sort排序,字母數字中文為null,排序優先順序最高,排在上面;然後pos排序是用預設的 ascii排序;

解釋2:為什麼用 hex()函式做十六進製制編碼?因為中文用常規的正則不能匹配到結果,起碼我沒匹配到結果;

解釋3:為什麼要把字母數字中文放在一起匹配?因為我機智啊,不然處理複雜度會更高;

沒有想到什麼好的方法,只能是將 name varchar(10),先拆分為 10個單字元,然後再逐字進行匹配;

資料量少的時候,可以參考下,資料量大了後,一定是結合三方進行功能實現的;至於怎麼實現,我去找找其他大佬有沒有漏下點什麼的。

JS判斷數字字母中文

1.var reg w u4e00 u9fa5 if arr username.match reg else 2.利用正規表示式限制網頁表單裡的文字框輸入內容 用正規表示式限制只能輸入中文 nkeyup value value.replace u4e00 u9fa5 g,onbeforepaste ...

JS判斷數字字母中文

1.var reg w u4e00 u9fa5 if arr username.match reg else 2.利用正規表示式限制網頁表單裡的文字框輸入內容 用正規表示式限制只能輸入中文 nkeyup value value.replace u4e00 u9fa5 g,onbeforepaste ...

JS判斷數字字母中文

1.var reg w u4e00 u9fa5 if arr username.match reg else 2.利用正規表示式限制網頁表單裡的文字框輸入內容 用正規表示式限制只能輸入中文 onkeyup value value.replace u4e00 u9fa5 g,onbeforepaste...