Bạn có cần thoát các ký tự đặc biệt hoặc thoát một trích dẫn trong SQL không?
Mục lục
- Trốn thoát là gì?
- Sử dụng hai trích dẫn đơn cho mỗi trích dẫn để hiển thị
- Sử dụng dấu gạch chéo ngược trước trích dẫn
- Sử dụng trích dẫn theo nghĩa đen
- Sử dụng chức năng CHR
- Thoát ký tự đại diện SQL
Trốn thoát là gì?
Khi bạn đang làm việc với các giá trị văn bản trong SQL, bạn sử dụng các ký tự trích dẫn đơn
Đây có thể là khi bạn đang chọn chúng
SELECT 'Database Star';Hoặc, khi bạn đang chèn chúng
INSERT INTO customer (id, customer_name) VALUES (45, 'ABC Company');Ký tự trích dẫn đơn cho biết vị trí bắt đầu và kết thúc chuỗi của bạn
Nhưng nếu bạn muốn có một trích dẫn như một phần của chuỗi thì sao?
Ví dụ
SELECT 'O'Reilly';Điều này sẽ gây ra sự cố vì có ba dấu nháy đơn. Cơ sở dữ liệu không biết chuỗi của bạn sẽ kết thúc ở đâu
Vì vậy, để cho phép các giá trị trong dấu ngoặc đơn (và một số ký tự đặc biệt khác) được sử dụng trong một chuỗi, bạn cần “thoát” chúng
Thoát một ký tự là nơi bạn nói với cơ sở dữ liệu, “Này, ký tự này ở đây là một phần trong chuỗi của tôi, đừng coi nó là một ký tự đặc biệt như bạn thường làm”
Có một số phương thức trích dẫn đơn thoát SQL mà tôi sẽ trình bày trong bài viết này
Sử dụng hai trích dẫn đơn cho mỗi trích dẫn để hiển thị
nhà cung cấp. Oracle, Máy chủ SQL, MySQL, PostgreSQL
Phương pháp đơn giản nhất để thoát dấu nháy đơn trong SQL là sử dụng hai dấu nháy đơn. Ví dụ: nếu bạn muốn hiển thị giá trị O'Reilly, bạn sẽ sử dụng hai dấu ngoặc kép ở giữa thay vì một
Trích dẫn đơn là ký tự thoát trong Oracle, SQL Server, MySQL và PostgreSQL
SELECT 'O''Reilly' AS quoted_string;QUOTED_STRINGO'ReillyNếu bạn muốn sử dụng nhiều hơn một trong một chuỗi, bạn có thể
SELECT 'Let''s go to that ''place''' AS quoted_string;QUOTED_STRINGHãy đến 'địa điểm' đó
Sử dụng dấu gạch chéo ngược trước trích dẫn
nhà cung cấp. Mysql, PostgreSQL
Trong MySQL, bạn có thể thêm dấu gạch chéo ngược trước câu trích dẫn để thoát nó
Ví dụ
SELECT 'O\'Reilly' AS quoted_string;QUOTED_STRINGO'Reilly
Sử dụng trích dẫn theo nghĩa đen
nhà cung cấp. tiên tri
Một phương thức trích dẫn đơn thoát SQL khác mà bạn có thể sử dụng trong Oracle là “trích dẫn theo nghĩa đen”
Điều này có nghĩa là bạn có thể đặt chữ “q” ở phía trước, theo sau là ký tự thoát, sau đó là dấu ngoặc vuông
Ví dụ
SELECT q'[O'Reilly]' AS quoted_string FROM dual;QUOTED_STRINGO'ReillyĐiều này có nghĩa là bất kỳ trích dẫn nào bên trong dấu ngoặc vuông đều không thoát. Chuỗi đầu ra xuất hiện chính xác như bạn đã nhập
Một vi dụ khac
SELECT q'[The 'end' of the day]' AS quoted_string FROM dual;QUOTED_STRING'Kết thúc' trong ngàyBạn vẫn có thể làm điều này với nhiều dấu ngoặc đơn
SELECT q'[This is an ''example'' of two single quotes]' AS quoted_string FROM dual;QUOTED_STRINGĐây là "ví dụ" về hai dấu nháy đơn
Sử dụng chức năng CHR
nhà cung cấp. Máy chủ Oracle, SQL
Một phương pháp khác là sử dụng chức năng CHR
Hàm CHR trả về một ký tự từ mã ASCII đã chỉ định
CHR(39) trả về một trích dẫn duy nhất, có thể được nối với chuỗi của bạn
Ví dụ
SELECT 'O' || CHR(39) || 'Reilly' AS quoted_string;QUOTED_STRINGO'ReillyBạn cũng có thể sử dụng cái này ở nhiều nơi
INSERT INTO customer (id, customer_name) VALUES (45, 'ABC Company');0QUOTED_STRING'Kết thúc' trong ngày
Thoát ký tự đại diện SQL
nhà cung cấp. tiên tri
Khi bạn đang sử dụng từ khóa THÍCH, bạn cung cấp các ký tự đại diện
Biểu tượng % đại diện cho 0 hoặc nhiều ký tự và ký hiệu _ đại diện cho một ký tự
Nếu bạn muốn những ký tự đó là một phần của chuỗi chứ không phải ký tự đại diện thì sao?
Bạn có thể làm điều đó như một phần của từ khóa THÍCH, bằng cách chỉ định từ khóa ESCAPE
INSERT INTO customer (id, customer_name) VALUES (45, 'ABC Company');1Truy vấn này tìm kiếm tất cả các giá trị customer_name chứa dấu gạch dưới
Thông thường, dấu gạch dưới biểu thị một ký tự đại diện một ký tự, nhưng tôi đã chỉ định từ khóa ESCAPE '\' ở đây. Điều này có nghĩa là ký tự \ được sử dụng làm ký tự thoát, buộc ký tự _ phải được sử dụng theo nghĩa đen chứ không phải ký tự đại diện
Chúng tôi có thể chỉ định một ký tự thoát khác nếu cần
INSERT INTO customer (id, customer_name) VALUES (45, 'ABC Company');2Điều này thực hiện cùng một truy vấn, chỉ sử dụng một ký tự thoát khác
Chúng ta cũng có thể thoát khỏi ký hiệu %
INSERT INTO customer (id, customer_name) VALUES (45, 'ABC Company');3Truy vấn này tìm tất cả các giá trị customer_name bắt đầu bằng ký hiệu %
Vì vậy, đó là cách bạn có thể thoát khỏi dấu nháy đơn trong SQL. Có một vài phương pháp, vì vậy bạn có thể sử dụng bất kỳ phương pháp nào bạn thích