Trong MariaDB, SUBSTR()
là từ đồng nghĩa với SUBSTRING()
.
Đây là một hàm chuỗi tích hợp trả về một chuỗi con từ một chuỗi đã cho.
Nó yêu cầu ít nhất hai đối số; chuỗi và vị trí để trích xuất chuỗi con từ đó. Nó cũng chấp nhận đối số thứ ba tùy chọn cho phép bạn chỉ định thời lượng của chuỗi con.
Cú pháp
Cú pháp có các dạng sau:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(str FROM pos FOR len)
Ở đâu str
là chuỗi, pos
là vị trí bắt đầu của chuỗi con và len
là số ký tự cần trích xuất.
Hai biểu mẫu sử dụng FROM
từ khóa là cú pháp SQL chuẩn.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT SUBSTR('Good doggy', 6);
Kết quả:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Đây là ví dụ tương tự, nhưng sử dụng cú pháp SQL chuẩn:
SELECT SUBSTR('Good doggy' FROM 6);
Kết quả:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Độ dài chuỗi con
Dưới đây là một ví dụ chỉ định độ dài của chuỗi con cần trích xuất:
SELECT SUBSTR('Good doggy', 6, 3);
Kết quả:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
Và đây nó đang sử dụng cú pháp SQL chuẩn:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Kết quả:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
Vị trí phủ định
Việc chỉ định giá trị âm cho vị trí khiến vị trí bắt đầu được đếm ngược so với cuối chuỗi:
SELECT SUBSTR('Good doggy', -5);
Kết quả:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
Một vị trí phủ định cũng có thể được sử dụng khi sử dụng cú pháp SQL chuẩn:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Kết quả:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
Trong trường hợp này, tôi cũng đặt độ dài cho chuỗi con.
Chế độ Oracle
Khi ở chế độ Oracle, vị trí bắt đầu của 0
(không) được coi là 1
. Tuy nhiên, vị trí bắt đầu của 1
cũng được coi là 1
.
Điều này trái ngược với các chế độ khác, trong đó 0
sẽ trả về một chuỗi trống.
Ví dụ:
SET SQL_MODE=ORACLE;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Kết quả:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Đây là chế độ mặc định:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Kết quả:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Đối số rỗng
Nếu bất kỳ (hoặc tất cả) đối số null
, SUBSTR()
hàm trả về null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Kết quả:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Thiếu đối số
Gọi SUBSTR()
mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT SUBSTR();
Kết quả:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1