เมื่อทำงานกับการสืบค้นข้อมูล บางครั้งเราจำเป็นต้องนำข้อมูลดิบจากฐานข้อมูลของเรามาและฟอร์แมตใหม่ในลักษณะที่แตกต่างออกไปเพื่อใช้ในที่อื่น ในบทความนี้ เราจะดูฟังก์ชันสองสามอย่างใน MySQL เพื่อช่วยให้เราทำงานกับประเภทสตริงในการสืบค้นของเรา
การสร้างสคีมา
ส่วนนี้มีไว้สำหรับการเตรียมสคีมาด่วนเพื่อแสดงแนวคิด SQL ที่กล่าวถึงในโพสต์นี้ เราใช้ MySQL สำหรับฟังก์ชันต่างๆ - ฉันขอแนะนำให้ใช้ SQL Fiddle เพื่อฝึกการใช้ไวยากรณ์และเรียกใช้คำค้นหาของคุณ คุณยังสามารถทดสอบการสืบค้นของคุณในฐานข้อมูลเชิงสัมพันธ์อื่นๆ ได้ที่นั่น
สร้างตารางและแทรกค่า
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");
สี่บรรทัดบนสุดสร้างตาราง “วันเกิด” ด้วยคอลัมน์ "ชื่อ" และ "วันเกิด" ส่วนที่เหลือจะแทรกค่าลงในฐานข้อมูล เราใช้สิ่งนี้เมื่อเราสร้างข้อความค้นหาของเรา
หากเราเรียกใช้การสืบค้นข้อมูลพื้นฐานในตารางของเรา คำสั่งการสืบค้นและผลลัพธ์จะเป็นดังนี้:
SELECT name, birthday FROM birthdays;
ผลลัพธ์:
ชื่อ | วันเกิด |
คริส | 20/11/2536 |
ดันแคน | 01/15/1987 |
ลูคัส | 07/21/1996 |
อเล็กซ่า | 12/31/1988 |
การสร้างคำสั่งแบบสอบถาม
CONCAT()
CONCAT()
ฟังก์ชันส่งคืนผลลัพธ์หลังจากรวมอาร์กิวเมนต์เป็นสตริงเดียว มีอาร์กิวเมนต์อย่างน้อยหนึ่งอาร์กิวเมนต์ แต่อาจมีหลายฟังก์ชัน อาร์กิวเมนต์ในฟังก์ชันอาจเป็นข้อใดข้อหนึ่งต่อไปนี้:
- สตริงไบนารี – หากหนึ่งในอาร์กิวเมนต์เป็นสตริงไบนารี ค่าที่ส่งคืนจะเป็นสตริงไบนารี
- สตริงที่ไม่ใช่ไบนารี – ค่าสตริงทั่วไป ถ้าอาร์กิวเมนต์ทั้งหมดเป็นค่าสตริงที่ไม่ใช่ไบนารี
CONCAT()
ส่งคืนค่าสตริงที่ไม่ใช่ไบนารี
- ตัวเลข – หากอินพุตหนึ่งเป็นประเภทตัวเลข อินพุตนั้นจะถูกบังคับให้เป็นสตริงที่ไม่ใช่ไบนารีก่อนที่จะรวมเข้ากับอาร์กิวเมนต์อื่น
- ไม่มีค่า – หากมีค่าเป็น NULL ค่าเหล่านั้นจะถูกละเว้น
ไวยากรณ์ที่เป็นทางการมีดังนี้:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
CONCAT( <str value 1>, <str value 2>, [ … <str value N> ]);
เราใช้คีย์เวิร์ด CONCAT กับวงเล็บเพื่อระบุว่าเป็นฟังก์ชัน ภายในวงเล็บคือสตริงอินพุต N นี่คือหน้าตาของการใช้ MySQL:
SELECT CONCAT(name, " ", birthday) AS Result FROM birthdays;
เรา "เลือก" ค่าที่ส่งกลับจากการต่อชื่อ อักขระช่องว่าง และวันเกิด แล้วตั้งชื่อเป็น "ผลลัพธ์"
ผลลัพธ์ของแบบสอบถามนี้คือ:
ผลลัพธ์ |
คริส 11/20/1993 |
ดันแคน 01/15/1987 |
ลูคัส 07/21/1996 |
อเล็กซ่า 12/31/1988 |
เปรียบเทียบผลลัพธ์นี้กับข้อความค้นหาดั้งเดิมที่เราทดสอบด้วยในส่วนการสร้างสคีมา มันแตกต่างกันอย่างไร? อะไรจะเป็นประโยชน์ในการตั้งค่าข้อมูลในลักษณะนี้เมื่อเทียบกับวิธีการที่กำหนด
ไม่จำเป็นต้องมีคำตอบที่ถูกหรือผิด อยู่ที่ว่าคุณพึ่งพาข้อมูลนี้ในแอปพลิเคชันของคุณอย่างไร
CONCAT_WS()
CONCAT_WS()
ฟังก์ชั่นเหมือนกับ CONCAT()
อย่างไรก็ตาม มีอาร์กิวเมนต์แรกที่จำเป็นซึ่งไม่ได้อยู่ใน CONCAT()
ดั้งเดิม การทำงาน. อาร์กิวเมนต์นี้เป็นตัวคั่นระหว่างอาร์กิวเมนต์ที่เหลือในฟังก์ชัน กฎที่เหลือของ CONCAT()
นำมาใช้.
ไวยากรณ์ที่เป็นทางการมีดังนี้:
CONCAT_WS(<separator>, <str value 1>, <str value 2>, [ … <str value N> ]);
เราใช้ CONCAT_WS()
คีย์เวิร์ดที่มีวงเล็บคู่เพื่อระบุว่าเป็นฟังก์ชัน อาร์กิวเมนต์แรกในวงเล็บคือตัวคั่นที่อยู่ระหว่างแต่ละสตริงอินพุต อาร์กิวเมนต์ที่เหลือเป็นสตริงที่เรารวมเข้าด้วยกัน นี่คือรูปลักษณ์โดยใช้ MySQL:
SELECT CONCAT_WS(", ", name, birthday) AS Result FROM birthdays;
ผลลัพธ์คือการต่อสตริงกับอาร์กิวเมนต์แรกระหว่างอาร์กิวเมนต์อื่นๆ
ผลลัพธ์ |
คริส, 20/11/2536 |
ดันแคน 01/15/1987 |
ลูคัส 07/21/1996 |
อเล็กซ่า 12/31/1988 |
เช่นเดียวกับ CONCAT()
ฟังก์ชัน CONCAT_WS()
ฟังก์ชันส่งคืนคอลัมน์เดียวชื่อ Result โดยที่ค่าเป็นสตริงอินพุตที่ต่อกับอักขระตัวคั่น
บทสรุป
ในบทความนี้ เราจะพูดถึง SQL CONCAT()
และ CONCAT_WS()
ฟังก์ชั่นที่เกี่ยวข้องกับการใช้งานใน MySQL โปรดทราบว่าอาจมีความแตกต่างเล็กน้อยในไวยากรณ์เมื่อใช้ฐานข้อมูลเชิงสัมพันธ์อื่นๆ เนื่องจากอาจมีรสชาติของ SQL ของตัวเอง แนวคิดของฟังก์ชันเหมือนกัน แต่อาจมีการใช้คำต่างกัน