Khi làm việc với các truy vấn, đôi khi chúng ta cần lấy dữ liệu thô từ cơ sở dữ liệu của mình và định dạng lại nó theo một cách khác để sử dụng ở nơi khác. Trong bài viết này, chúng tôi xem xét một số hàm trong MySQL để giúp chúng tôi làm việc với các loại chuỗi trong các truy vấn của chúng tôi.
Xây dựng lược đồ
Phần này dành để chuẩn bị một lược đồ nhanh để minh họa các khái niệm SQL được đề cập trong bài đăng này. Chúng tôi sử dụng MySQL cho các chức năng - Tôi khuyên bạn nên sử dụng SQL Fiddle để thực hành sử dụng cú pháp và chạy các truy vấn tìm kiếm của bạn. Tại đó, bạn cũng có thể kiểm tra các truy vấn của mình trong các cơ sở dữ liệu quan hệ khác.
Tạo bảng và chèn giá trị
CREATE TABLE birthdays ( name varchar(200) NOT NULL, birthday varchar(10) NOT NULL ); INSERT INTO birthdays (name, birthday) VALUES("Jane", "11/20/1993"); INSERT INTO birthdays (name, birthday) VALUES("Duncan", "01/15/1987"); INSERT INTO birthdays (name, birthday) VALUES("Lucas", "07/21/1996"); INSERT INTO birthdays (name, birthday) VALUES("Alexa", "12/31/1988");
Bốn dòng trên cùng tạo bảng “sinh nhật” với các cột "tên" và "ngày sinh". Phần còn lại chèn các giá trị vào cơ sở dữ liệu. Chúng tôi sử dụng điều này khi chúng tôi xây dựng các câu lệnh truy vấn của mình.
Nếu chúng tôi chạy một truy vấn cơ bản trên bảng của mình, đây là câu lệnh truy vấn và kết quả sẽ như thế nào:
SELECT name, birthday FROM birthdays;
Kết quả:
tên | sinh nhật |
Chris | 20/11/1993 |
Duncan | 15/01/1987 |
Lucas | 21/07/1996 |
Alexa | 31/12/1988 |
Tạo câu lệnh truy vấn
CONCAT ()
CONCAT()
hàm trả về kết quả sau khi nối các đối số thành một chuỗi. Có ít nhất một đối số, nhưng có thể có nhiều hàm. Các đối số trong hàm có thể là bất kỳ một trong các đối số sau:
- Chuỗi nhị phân - Nếu bất kỳ đối số nào là chuỗi nhị phân thì giá trị trả về là chuỗi nhị phân.
- Chuỗi không nhị phân - Một giá trị chuỗi điển hình. Nếu tất cả các đối số là giá trị chuỗi không nhị phân,
CONCAT()
trả về một giá trị chuỗi không nhị phân.
- Số - Nếu một đầu vào thuộc kiểu số, thì nó bị ép buộc thành một chuỗi không nhị phân trước khi nó được nối với các đối số khác.
- Không có giá trị nào - Nếu có giá trị NULL, các giá trị đó đơn giản bị bỏ qua.
Cú pháp chính thức như sau:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
CONCAT( <str value 1>, <str value 2>, [ … <str value N> ]);
Chúng tôi sử dụng từ khóa CONCAT với một cặp dấu ngoặc đơn để cho biết đó là một hàm. Bên trong dấu ngoặc đơn là N chuỗi đầu vào. Đây là giao diện sử dụng MySQL:
SELECT CONCAT(name, " ", birthday) AS Result FROM birthdays;
Chúng tôi “CHỌN” giá trị trả về từ sự ghép nối của tên, dấu cách, và ngày sinh và gán cho nó tên “Kết quả”.
Kết quả của truy vấn này là:
Kết quả |
Chris 20/11/1993 |
Duncan 15/01/1987 |
Lucas 21/07/1996 |
Alexa 31/12/1988 |
So sánh kết quả này với câu lệnh truy vấn ban đầu mà chúng tôi đã thử nghiệm trong phần Xây dựng lược đồ. Nó khác nhau như thế nào? Đặt dữ liệu theo cách này có lợi gì hơn so với cách đã cho?
Không nhất thiết phải có câu trả lời đúng hay sai. Đó là tất cả về cách bạn dựa vào dữ liệu này trong ứng dụng của mình.
CONCAT_WS ()
CONCAT_WS()
giống như hàm CONCAT()
tuy nhiên, có một đối số bắt buộc đầu tiên không có trong CONCAT()
ban đầu chức năng. Đối số này là dấu phân cách giữa mỗi đối số còn lại trong hàm. Phần còn lại của các quy tắc của CONCAT()
áp dụng.
Cú pháp chính thức như sau:
CONCAT_WS(<separator>, <str value 1>, <str value 2>, [ … <str value N> ]);
Chúng tôi sử dụng CONCAT_WS()
từ khóa với một cặp dấu ngoặc đơn để cho biết đó là một chức năng. Đối số đầu tiên bên trong dấu ngoặc đơn là dấu phân cách giữa mỗi chuỗi đầu vào. Phần còn lại của các đối số là các chuỗi chúng ta nối với nhau. Dưới đây là giao diện sử dụng MySQL:
SELECT CONCAT_WS(", ", name, birthday) AS Result FROM birthdays;
Kết quả là nối chuỗi với đối số đầu tiên ở giữa mỗi đối số khác.
Kết quả |
Chris, 20/11/1993 |
Duncan 15/01/1987 |
Lucas 21/07/1996 |
Alexa 31/12/1988 |
Giống như CONCAT()
, CONCAT_WS()
hàm chỉ trả về một cột, có tên là Kết quả, trong đó giá trị là (các) chuỗi đầu vào được nối với ký tự phân tách.
Kết luận
Trong bài viết này, chúng tôi đề cập đến SQL CONCAT()
và CONCAT_WS()
khi chúng liên quan đến việc sử dụng nó trong MySQL. Hãy lưu ý rằng có thể có những khác biệt nhỏ về cú pháp khi sử dụng các cơ sở dữ liệu quan hệ khác vì chúng có thể có hương vị riêng của SQL. Khái niệm về hàm giống nhau, nhưng nó có thể được diễn đạt khác nhau.