碰到一個這樣的需求:查詢頁面的查詢條件有一條:按XXX號起始、XXX號截止查詢兩個號碼之間的所有數據("XXX號"由字母數字組成)。
遇到此問題時,第一反應是:字母數字在一起怎么比較大小?誰大誰小?
於是,我自己在庫(DB2)中修改了足夠多的數據來測試一下,數據(字段名:"REVERSE1")很簡單0-9,A-Z,a-z,還有一些為null。簡單的測試了一下:
1.sql語句:select REVERSE1 from syscompany order by REVERSE1;
2.結果:
3.結論:DB2數據庫字母數字比較大小的規則為:0-9<a<A<b<B<c<C<......<z<Z;
但是我們在實際運用中,我們遇到的肯定是好長的數字字母組合成的字符串,重點是還不知道輸入的字母有多長,那么對於不等長的字符串比較大小又是什么樣子的呢,我試了一下:
以下圖片基於的查詢條件的sql語句為:
XXX號對應:voucher0_.VOUCHERREGNO字段。
1.我沒有輸入XXX號進行查詢,結果:
2.我在"XXX號 從:" 查詢條件處輸入 "VPDJp" ,在" 到:" 查詢條件處輸入"z",結果:
可以看出,其比較大小的時候,是按從前往后的順序一個字符一個字符的去比較,如果前一個字符小了,就不看后面的字符了。
然后,我又想到一個問題,如果根據前一個字符大小來判斷整個字符串的大小,那么如果我的字符如果是:VPDJP0200000015001421313814152和VPDJP020000001500142131381415200比較,也就是前面相同,但是后面沒有任何字母數字了與"0"比較,誰大誰小呢?試驗一下:
1.我在"XXX號 從:" 查詢條件處輸入 "VPDJP0200000015001421313814152" ,在" 到:" 查詢條件處輸入"VPDJP0200000015001421313814152",結果:
2.我在"XXX號 從:" 查詢條件處輸入 "VPDJP0200000015001421313814152" ,在" 到:" 查詢條件處輸入"VPDJP020000001500142131381415200",結果:
由此可以看出:在前面字符相同的情況下,后面沒有數據與"0"比較,"0"是比較大的。