關於oracle的varchar2的比較大小的規律

2021-06-27 00:23:20 字數 1058 閱讀 4017

oracle中字串的比較有兩類

1.填補空格的語義比較

2.非填補空格的語義比較

填補空格的語義比較:

如果兩個字串有不同的長度,oracle首先會在短的字串那邊末尾新增空格,直到兩個字串長度相等。

oracle然後按字元順序比較兩個字串的值,如果發現到不同的字元,則按字段順序認定大小,如果沒有發現不同字元,oracle則認為兩個字串相等。這個規則意味著,如果只是尾號中有不同數目的空格,那麼則認為兩個字串是相等的。如'a '='a'.

使用填補空格的語義比較,oracle只針對char,nchar,字面量,或user函式返回的值。

非填補空格的語義比較:

oracle通過字元順序比較兩個字串的值。如果發現到字元值大的則大。如果兩個字串長度不同,則發現到字元值大的則大,否則長度大的則大,比如'b'>'ab','ab'>'a'.如果長度相等,並且各個位置字元相同,則認定為相等。

使用非填補空格的語義比較,oracle針對varchar2和nvarchar2。

1.注意使用char,char是定長型別,不足長度末尾補空格,比較大小採用填補空格的語義比較

2.注意char與其他字元連線,如

declare

a char(3):='ab';

b char(6):='ab';

begin

dbms_output.put_line(a||'c'); --ab c 其中ab和c之間有乙個空格

dbms_output.put_line(b||'c'); --ab c 其中ab和c之間有4個空格

if a||'c' >b||'c' then

dbms_output.put_line(1); //成立,採用非語義比較。

end if;

end;

關於oracle的啟動

有這麼一道題,是關於在例項啟動的時候,哪些檔案在某個階段是不是可以改動的,我覺得這個題是乙個很基礎的題,對於理解oracle有很大的幫助。於是我就查了一下相關資料,分享一下,適合初學者看。1 shutdown nomount 讀取引數檔案,根據引數檔案的記錄,配置sga,啟動後台程序。這個階段因為只...

關於oracle的啟動

有這麼一道題,是關於在例項啟動的時候,哪些檔案在某個階段是不是可以改動的,我覺得這個題是乙個很基礎的題,對於理解oracle有很大的幫助。於是我就查了一下相關資料,分享一下,適合初學者看。1 shutdown nomount 讀取引數檔案,根據引數檔案的記錄,配置sga,啟動後台程序。這個階段因為只...

關於Oracle分頁

connected to oracle9i enterprise edition release 9.2.0.6.0 connected as dev sql sql set timing on sql create table test table as 2 select rownum x 3 f...