Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm LENGTH () trong Oracle

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()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()LENGTHB() cú pháp, đối số có thể là bất kỳ kiểu dữ liệu nào CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB hoặc NCLOB .
  • Khi sử dụng LENGTHC() , LENGTH2()LENGTH4() cú pháp, đối số có thể là bất kỳ kiểu dữ liệu nào CHAR , VARCHAR2 , NCHAR , NVARCHAR2 (nhưng không CLOB hoặc NCLOB ).

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách để định dạng kết quả truy vấn của bạn trong SQLcl (Oracle)

  2. Giải quyết lỗi PLS-00323 trong Oracle

  3. Cách tạo người dùng trong Oracle và chỉ định đặc quyền

  4. Cách xóa tất cả các mục được lưu trong bộ nhớ cache trong Oracle

  5. ORA-08177:không thể tuần tự hóa quyền truy cập cho giao dịch này