Trong Oracle, TRIM()
hàm cho phép bạn cắt các ký tự khỏi các cạnh của một chuỗi.
Bạn có thể cắt các ký tự đầu, ký tự cuối hoặc cả hai.
Theo mặc định, nó cắt bớt khoảng trắng, nhưng bạn có thể tùy chọn chỉ định một ký tự hoặc các ký tự khác để cắt.
Cú pháp
Cú pháp như sau:
TRIM([ { { LEADING | TRAILING | BOTH }
[ trim_character ]
| trim_character
}
FROM
]
trim_source
)
Cả trim_character
và trim_source
có thể là VARCHAR2
hoặc bất kỳ kiểu dữ liệu nào có thể được chuyển đổi hoàn toàn thành VARCHAR2
.
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT TRIM('.' FROM '...Cat...')
FROM DUAL;
Kết quả:
TRIM('.'FROM'...CAT...') ___________________________ Cat
Trong trường hợp này, ký tự được chỉ định (.
) đã bị xóa khỏi cả hai bên của chuỗi.
Nó đã bị xóa từ cả hai bên vì tôi không chỉ định bên nào sẽ xóa nó.
Chúng ta có thể nhận được kết quả tương tự bằng cách bao gồm BOTH
từ khóa:
SELECT TRIM(BOTH '.' FROM '...Cat...')
FROM DUAL;
Kết quả:
TRIM(BOTH'.'FROM'...CAT...') _______________________________ Cat
Cắt bỏ các nhân vật chính
Đây là một lần nữa, nhưng chỉ loại bỏ các ký tự đứng đầu:
SELECT TRIM(LEADING '.' FROM '...Cat...')
FROM DUAL;
Kết quả:
TRIM(LEADING'.'FROM'...CAT...') __________________________________ Cat...
Cắt bỏ các ký tự theo sau
Và đây là nó chỉ có các ký tự ở cuối bị xóa:
SELECT TRIM(TRAILING '.' FROM '...Cat...')
FROM DUAL;
Kết quả:
TRIM(TRAILING'.'FROM'...CAT...') ___________________________________ ...Cat
Ký tự mặc định
Trong ví dụ này, tôi không chỉ định ký tự để cắt, do đó, nó cắt bớt khoảng trống:
SELECT TRIM(' Cat ')
FROM DUAL;
Kết quả:
TRIM('CAT') ______________ Cat
Không dễ dàng nhận thấy hiệu quả khi cắt bỏ khoảng trắng từ cả hai bên.
Dưới đây là một ví dụ khác giúp bạn dễ dàng nhận thấy rằng khoảng trắng đã được loại bỏ từ cả hai phía:
SELECT
'My' || ' Fat ' || 'Cat',
'My' || TRIM(' Fat ') || 'Cat'
FROM DUAL;
Kết quả:
'MY'||'FAT'||'CAT' 'MY'||TRIM('FAT')||'CAT' _____________________ ___________________________ My Fat Cat MyFatCat
Số
Chuỗi và ký tự cắt có thể là VARCHAR2
hoặc bất kỳ kiểu dữ liệu nào có thể được chuyển đổi hoàn toàn thành VARCHAR2
, vì vậy chúng ta có thể vượt qua một số như sau. Tuy nhiên, giá trị trả về là VARCHAR2
.
SELECT TRIM(LEADING 0 FROM 007)
FROM DUAL;
Kết quả:
TRIM(LEADING0FROM007) ________________________ 7
Đây là nó với một số khác được cắt bớt:
SELECT TRIM(LEADING 1 FROM 117)
FROM DUAL;
Kết quả:
TRIM(LEADING1FROM117) ________________________ 7
Giá trị rỗng
Nếu chuỗi hoặc ký tự cắt là null
kết quả là null
:
SET NULL 'null';
SELECT
TRIM(null FROM '...Cat...'),
TRIM(BOTH FROM null),
TRIM(null FROM null)
FROM DUAL;
Kết quả:
TRIM(NULLFROM'...CAT...') TRIM(BOTHFROMNULL) TRIM(NULLFROMNULL) ____________________________ _____________________ _____________________ null null null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Cắt bỏ chuỗi trống
Chuyển một chuỗi trống khi ký tự cắt dẫn đến null
:
SET NULL 'null';
SELECT TRIM('' FROM ' Cat')
FROM DUAL;
Kết quả:
TRIM(''FROM'CAT') ____________________ null
Nhưng việc thêm một khoảng trắng vào chuỗi trống sẽ thay đổi điều đó và cắt bớt bất kỳ khoảng trắng nào khỏi chuỗi:
SET NULL 'null';
SELECT TRIM(' ' FROM ' Cat')
FROM DUAL;
Kết quả:
TRIM(''FROM'CAT') ____________________ Cat
Số lượng đối số không chính xác
Đang gọi TRIM()
mà không chuyển bất kỳ đối số nào sẽ trả về lỗi:
SELECT TRIM()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TRIM() FROM DUAL Error at Command Line : 1 Column : 13 Error report - SQL Error: ORA-00936: missing expression 00936. 00000 - "missing expression" *Cause: *Action:
Và việc chuyển sai số đối số dẫn đến lỗi:
SELECT TRIM(' Cat ', 2)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT TRIM(' Cat ', 2) FROM DUAL Error at Command Line : 1 Column : 20 Error report - SQL Error: ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis" *Cause: *Action:
Cũng xem RTRIM()
và LTRIM()
để biết thêm các hàm được nhắm mục tiêu để cắt xén từng bên của chuỗi. Các hàm này cũng cho phép bạn cắt nhiều ký tự khỏi chuỗi.