Trong Oracle, LENGTH()
hàm trả về độ dài của đối số.
LENGTH()
cũng có thể được coi như một nhóm các chức năng. Có năm chức năng riêng biệt; LENGTH()
, LENGTHB()
, LENGTHC()
, LENGTH2()
và LENGTH4()
. Mỗi hàm tính toán độ dài theo một cách khác nhau.
Cú pháp
Cú pháp như sau:
{ LENGTH
| LENGTHB
| LENGTHC
| LENGTH2
| LENGTH4
}
(char)
Các hàm tính toán độ dài như sau:
Hàm | Tính độ dài bằng cách sử dụng… |
---|---|
LENGTH() | Các ký tự được xác định bởi bộ ký tự đầu vào, với ký tự đầu tiên của chuỗi có vị trí 1. |
LENGTHB() | Byte |
LENGTHC() | Ký tự hoàn chỉnh Unicode |
LENGTH2() | Điểm mã UCS2 |
LENGTH4() | Điểm mã UCS4 |
Loại đối số có thể như sau:
- Khi sử dụng
LENGTH()
vàLENGTHB()
cú pháp, đối số có thể là bất kỳ kiểu dữ liệu nàoCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
hoặcNCLOB
. - Khi sử dụng
LENGTHC()
,LENGTH2()
vàLENGTH4()
cú pháp, đối số có thể là bất kỳ kiểu dữ liệu nàoCHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
(nhưng khôngCLOB
hoặcNCLOB
).
Ví dụ
Đây là một ví dụ cơ bản:
SELECT LENGTH('Big fat cat')
FROM DUAL;
Kết quả:
11
So với LENGTHB()
Ví dụ này cho thấy các kết quả có thể khác nhau như thế nào, tùy thuộc vào chức năng cụ thể bạn đang sử dụng và bộ ký tự có liên quan.
Trong trường hợp này, chúng tôi so sánh LENGTH()
với LENGTHB()
:
SELECT
LENGTH('Böyük yağlı pişik') AS LENGTH,
LENGTHB('Böyük yağlı pişik') AS LENGTHB
FROM DUAL;
Kết quả:
LENGTH LENGTHB _________ __________ 17 22
Chúng ta có thể thấy rằng hai hàm trả về hai kết quả khác nhau. Điều này là do một số ký tự trong chuỗi này sử dụng hai byte.
LENGTH()
hàm trả về độ dài trong các ký tự như được xác định bởi bộ ký tự đầu vào, trong khi LENGTHB()
hàm trả về độ dài tính bằng byte .
Nếu chúng ta quay lại chuỗi ban đầu, kết quả giống nhau giữa hai hàm:
SELECT
LENGTH('Big fat cat') AS LENGTH,
LENGTHB('Big fat cat') AS LENGTHB
FROM DUAL;
Kết quả:
LENGTH LENGTHB _________ __________ 11 11
Chuỗi này chỉ sử dụng một byte cho mỗi ký tự và do đó độ dài tính bằng byte giống với số ký tự.
Đối số rỗng
Nếu đối số là null
, kết quả là null
:
SET NULL 'null';
SELECT
LENGTH(null) AS LENGTH,
LENGTHB(null) AS LENGTHB,
LENGTHC(null) AS LENGTHC,
LENGTH2(null) AS LENGTH2,
LENGTH4(null) AS LENGTH4
FROM DUAL;
Kết quả:
LENGTH LENGTHB LENGTHC LENGTH2 LENGTH4 _________ __________ __________ __________ __________ null null 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.
Số lượng đối số không chính xác
Việc gọi hàm mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT LENGTH()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT LENGTH() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
Và việc chuyển quá nhiều đối số cũng dẫn đến lỗi:
SELECT LENGTH('Big fat cat', 'oops')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT LENGTH('Big fat cat', 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: