重點注意Delphi和Oracle-SQL中比較字符串時空字符串''的根本性的不一樣數據庫
Delphi中字符串比較大小的規則:對應位置的字符按照字符編碼值逐個對比,直到遇到能夠肯定大小關係的就結束比較編程
常見的一些字符的字符編碼編碼
'0'對應字符編碼48;'1'對應字符編碼49。'2'、'3'、……、'9'依次遞增code
'A'對應字符編碼65。'B'、'C'、……'Y'、'Z'依次遞增orm
'a'對應字符編碼97。'b'、'c'、……'y'、'z'依次遞增ci
' '對應字符編碼32,注意是空格,而不是空字符串字符串
好比'abcd' 和 'abd'比較get
首先第一位'a'和'a'比較,同樣,繼續下面的比較it
接着第二位'b'和'b'比較,同樣,繼續下面的比較
接着第三位'c'和'd'比較,'c'<'d',因此'abcd'<'abd',結果出來!比較結束
列舉出常見的比較
'101'<'12'爲True
'101'<'102'爲True
'abcd'>'abc'爲True,這個須要注意
'12345'>'1234'爲True,這個須要注意
'1'>'',在Delphi中任意非空字符串都大於空字符串''
能夠本身在Delphi中編程試一下
procedure TForm1.btn1Click(Sender: TObject); begin //這裏面的四種比較都是True,因此都會彈出框 if '123'>'12' then ShowMessage(' ''123''>''12'' '); if 'abcd'>'abc' then ShowMessage(' ''abcd''>''abc'' '); if '1'>'' then ShowMessage(' ''1''>'''' '); if '102'>'10' then ShowMessage(' ''102''>''10'' '); end;
親自在Oracle中驗證過!
通常在SQL中的where條件中會用到字符串的比較,好比select * from user where name > 'john'
首先特別注意'',和Delphi有一個很大的不一樣
任何字符串都不能和''進行比較,由於比較結果既不爲True也不爲False
若是在select的where判斷中有和''的比較會致使選不出任何一條記錄
除了當心''以外,其他同Delphi:對應位置的字符按照字符編碼值逐個對比,直到遇到能夠肯定大小關係的就結束比較
幾種常見的字符對應的編碼
select ascii('1') from dual; 字符編碼值 49
select ascii('A') from dual; 字符編碼值 65
select ascii('a') from dual; 字符編碼值 97
select ascii(' ') from dual; 字符編碼值 32
列舉出常見的比較
'abcd'>'abc'爲True,和Delphi中同樣
'12345'>'1234'爲True,和Delphi中同樣
其餘的數據庫的相關規則目前尚未試過,好比MySQL、SQLite……