這是網路上參考別人寫的方式,靈機一動想到的

因為想到這個方法覺得很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

 

理論上,只要是不重複的字串應該都可以適用

拜託鞭小力點...

創作者介紹

清新下午茶

Johnny 鋼鍊 發表在 痞客邦 PIXNET 留言(0) 人氣()