這是網路上參考別人寫的方式,靈機一動想到的
因為想到這個方法覺得很BG且好笑
就當個茶餘飯後的笑話分享給大家
在這之前還是先呼籲一下,
在建立DB的時候,數字就應該用數字的格式儲存
不要像我犯同樣的錯誤
拿小寫的中文數字(一二三四五六七八九)
或是大寫的中文數字(壹貳參肆伍陸柒捌玖拾)
去儲存數字,然後自找苦吃
因為它的ASCII的code大小也沒照順序(所以資料庫的文字排序失效)
————————————————————
網路上對於MSSQL有個解法
就是使用列表比對的方式
也有人使用自訂函數去parse中文數字然後轉換成對應的數字
也可以利用一個對應的轉換表,用inner join的方式去做
————————————————————
在MySQL裡,我找到一個還不錯的做法:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
Locate函數:
Locate(欄位名稱, 搜尋比對的字串)
找尋字串中,第一個出現的位置,並回傳其位置
而這位置就是我們要的順序結果(反正多大也不重要,至少相對順序是對的)
如果我有一張表table01
todo | week |
寫作業 | 一 |
買東西 | 三 |
聚餐 | 二 |
看電影 | 四 |
想照星期排序(這就中文數字了吧….Orz)
就這樣下
select *, LOCATE( week, ‘一二三四五六日’ ) from table01 order by LOCATE( week, ‘一二三四五六日’ );
聰明的你,就會在phpmyadmin看到這個結果,然後就會跟我一樣大笑XDD
todo | week | LOCATE( week, ‘一二三四五六日’ ) |
寫作業 | 一 | 1 |
聚餐 | 二 | 2 |
買東西 | 三 | 3 |
看電影 | 四 | 4 |
理論上,只要是不重複的字串應該都可以適用
拜託鞭小力點…