Oracle中時間、數字、字符格式詳解
本文面向想學習Oracle知識的各位數據庫管理員,希望通過本文,讓大家對于Oracle中時間、數字、字符格式有更深刻的理解。51CTO數據庫也向您推薦《Oracle數據庫開發(fā)應用指南》來幫助您更好的理解本文。
字符格式
Oracle中字符串的比較有兩類
1.填補空格的語義比較
2.非填補空格的語義比較
填補空格的語義比較:
如果兩個字符串有不同的長度,Oracle首先會在短的字符串那邊末尾添加空格,直到兩個字符串長度相等。
Oracle然后按字符順序比較兩個字符串的值,如果發(fā)現(xiàn)到不同的字符,則按字段順序認定大小,如果沒有發(fā)現(xiàn)不同字符,Oracle則認為兩個字符串相等。這個規(guī)則意味著,如果只是尾號中有不同數目的空格,那么則認為兩個字符串是相等的。如'a '='a'.
使用填補空格的語義比較,Oracle只針對char,nchar,字面量,或user函數返回的值。
非填補空格的語義比較:
Oracle通過字符順序比較兩個字符串的值。如果發(fā)現(xiàn)到字符值大的則大。如果兩個字符串長度不同,則發(fā)現(xiàn)到字符值大的則大,否則長度大的則大,比如'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;
3.在使用char的sql中,或表類型定義中,確定是定長的才使用,否則可能導致相關問題,如果有char的,比如要查詢,如where charstring='abcd',后面的字面量最好和char長度一致
4.其實char 的效率和varchar2沒有什么區(qū)別。tom測試過。
【編輯推薦】