重點注意Delphi和Oracle-SQL中比較字串時空字串“的根本性的不同
Delphi中的字串比較
-
Delphi中字串比較大小的規則:對應位置的字元按照字元編碼值逐個對比,直到遇到可以確定大小關係的就結束比較
-
常見的一些字元的字元編碼
-
`0`對應字元編碼48;`1`對應字元編碼49。`2`、`3`、……、`9`依次遞增
-
`A`對應字元編碼65。`B`、`C`、……`Y`、`Z`依次遞增
-
`a`對應字元編碼97。`b`、`c`、……`y`、`z`依次遞增
-
` `對應字元編碼32,注意是空格,而不是空字串
-
-
比如`abcd` 和 `abd`比較
-
首先第一位`a`和`a`比較,一樣,繼續下面的比較
-
接著第二位`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中的字串比較
-
親自在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……