首先要說的是Oracle中字符類型的比較都是基於ASCII碼表來實現的,我就簡單做個總結。
Oracle中varchar2類型的字符串使用的是非填充空格的標准來進行比較的(表格中右邊的那列,注意空格的情況)。
Blank-Padded |
Nonpadded |
'ac' > 'ab' | 'ac' > 'ab' |
'ab' > 'a ' | 'ab' > 'a ' |
'ab' > 'a' | 'ab' > 'a' |
'ab' = 'ab' | 'ab' = 'ab' |
'a ' = 'a' | 'a ' > 'a' |
在比較時(類型一致的前提下),如果長度一致,會先比較第一個字符的在ASCII碼中的大小,大的那個則整個字符串大於小的那個字符串,否則就比較下一個字符,方法同此;
如果長度不一致,比較方法同上,只是存在值的字符位的值大於不存在值的,存在空格的也是把另一個字符串對應字符位的值和ASCII碼中空格的值進行比較。
存在錯誤歡迎指正,謝謝!
參考資料(對另外的字符類型也有說明):
https://blog.csdn.net/rockpk008/article/details/41087679
https://blog.csdn.net/xiadingling/article/details/82115860