Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

วิธีสร้างแบบสอบถามโดยใช้ฟังก์ชัน SQL Concatenate

เมื่อทำงานกับการสืบค้นข้อมูล บางครั้งเราจำเป็นต้องนำข้อมูลดิบจากฐานข้อมูลของเรามาและฟอร์แมตใหม่ในลักษณะที่แตกต่างออกไปเพื่อใช้ในที่อื่น ในบทความนี้ เราจะดูฟังก์ชันสองสามอย่างใน 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 ของตัวเอง แนวคิดของฟังก์ชันเหมือนกัน แต่อาจมีการใช้คำต่างกัน