Trong MariaDB, MID()
là từ đồng nghĩa với SUBSTRING()
. Nó trả về một chuỗi con từ một chuỗi đã cho.
Theo tài liệu MariaDB, nó là từ đồng nghĩa với SUBSTRING(str,pos,len)
cú pháp của SUBSTRING()
tuy nhiên, các thử nghiệm của tôi cho thấy nó hoạt động với tất cả các dạng khác nhau.
Cú pháp
Theo tài liệu MariaDB, cú pháp như sau:
MID(str,pos,len)
Tuy nhiên, tôi nhận thấy rằng nó hoạt động với các biểu mẫu sau (giống với các biểu mẫu SUBSTRING()
hỗ trợ):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(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.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT MID('Drink your beer', 7);
Kết quả:
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Đây là ví dụ tương tự, nhưng sử dụng FROM
cú pháp:
SELECT MID('Drink your beer' FROM 7);
Kết quả:
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Độ 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. Đây là cú pháp duy nhất mà tài liệu MariaDB trích dẫn cho MID()
chức năng.
SELECT MID('Drink your beer', 7, 4);
Kết quả:
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
Và ở đây nó đang sử dụng FROM...FOR
cú pháp:
SELECT MID('Drink your beer' FROM 7 FOR 4);
Kết quả:
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
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 MID('Drink your beer', -9);
Kết quả:
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
Vị trí phủ định cũng có thể được sử dụng khi sử dụng FROM
cú pháp:
SELECT MID('Drink your beer' FROM -9 FOR 4);
Kết quả:
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
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
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Kết quả:
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Đây là chế độ mặc định:
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Kết quả:
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Đối số rỗng
Nếu bất kỳ (hoặc tất cả) đối số null
, MID()
hàm trả về null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Kết quả:
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Thiếu đối số
Gọi MID()
mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT MID();
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