| 特性 | 空格填補語義 | 非空格填補語義 |
|---|---|---|
| 適用類型 | CHAR, NCHAR, 字面量, USER函數返回值 | VARCHAR2, NVARCHAR2 |
| 長度處理 | 短串尾部補空格至等長 | 直接按原長度比較 |
| 比較規則 | 逐字符比較,全等則相等 | 逐字符比較,長度不同則長者大 |
| 'a' vs 'a ' | 相等 | 不等(後者大) |
含義:尾部空格數量不影響比較結果,'abc' = 'abc ' 為真。
'ab' > 'a')DECLARE
a CHAR(3) := 'ab'; -- 實際存儲 'ab '
b CHAR(6) := 'ab'; -- 實際存儲 'ab '
BEGIN
DBMS_OUTPUT.PUT_LINE(a || 'c'); -- 輸出: ab c (中間有1個空格)
DBMS_OUTPUT.PUT_LINE(b || 'c'); -- 輸出: ab c (中間有4個空格)
-- 非填補語義比較:'ab c' > 'ab c' 為真!
IF a || 'c' > b || 'c' THEN
DBMS_OUTPUT.PUT_LINE('a||c 大於 b||c');
END IF;
END;
-- 表結構: col CHAR(10)
-- 查詢:
SELECT * FROM t WHERE col = 'abc'; -- 字面量長度3
-- 實際比較: 'abc ' (補7空格) vs 表中值
-- 若表中存 'abc' 實際為 'abc ',匹配成功
-- 若表中存 'abc ' 實際為 'abc ' (VARCHAR2),不匹配!
WHERE char_col = RPAD('abc', 10)TRIM或RPAD對齊本文重點講解字符格式。數字格式請參考TO_CHAR(number, 'FM999G999D00'),日期格式參考TO_DATE/TO_CHAR格式模型(YYYY, MM, DD, HH24, MI, SS等)。