โจทย์ :: จงคัดแยก title, firstname, lastname, sex โดยที่ (ถ้า title= Mr. ให้แสดง 'ชาย', ถ้า title = Miss ให้แสดง 'หญิง')
:: ตัวอย่างข้อมูล ::
:: ผลลัพธ์ที่ต้องการ ::
:::::::::::: เฉลย ::::::::::::
สร้าง Table ชื่อ employee(SQL)
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(250) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`salary` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
INSERT INTO `employee` VALUES ('1', 'Mr. Adam Johnson', '27', '36000');
INSERT INTO `employee` VALUES ('2', 'Miss Natacha Smith', '32', '40000');
INSERT INTO `employee` VALUES ('3', 'Mr. John wasson', '45', '60000');
INSERT INTO `employee` VALUES ('4', 'Mr. Andy Davic', '35', '56000');
ทดสอบการ select ข้อมูลตามโจทย์ (SQL)
SELECT
this_.id as "Id"
, substring_index(this_.`name`,' ',1) as "Title"
, substring_index(substring_index(this_.`name`, ' ', 2), ' ', -1) as "Firstname"
, substring_index(this_.`name`,' ',-1) as "Lastname"
, (
CASE substring_index(this_.`name`,' ',1) -- ถ้าข้อมูลชุดนี้
WHEN 'Mr.' THEN 'ชาย' -- เงื่อนไขที่ 1 = 'Mr.' THEN ให้แสดง 'ชาย'
WHEN 'Miss' THEN 'หญิง' -- เงื่อนไขที่ 2 = 'Miss' THEN ให้แสดง 'หญิง'
END
)as "Sex"
, this_.age as "Age"
, this_.salary as "Salary"
FROM `employee` this_
อธิบายคำสั่ง
substring_index(str, delim, count)
จากโค้ดเดิมข้างบน
substring_index(this_.`name`, ' ', 1)
/* substring_index(คอลัมน์ที่ต้องการแยกข้อมูล, แยกด้วยอะไร , ตั้งแต่ index ที่ 0 ถึง index ที่เท่าไหร่) */
ตัวอย่างเช่น this_.`name` = Mr. Adam Johnson หากเราใช้คำสั่ง substring_index
ผลลัพธ์ที่ได้จากคำสั่ง
/* กรณีที่เราเข้าถึง index เป็นค่า + คำสั่งจะแยกข้อมูลจาก หน้า --> หลัง */
/* แต่ถ้าเราเข้าถึง index เป็นค่า - คำสั่งจะแยกข้อมูลจาก หลัง --> หน้า */
substring_index(this_.`name`, ' ', 1)
Result: Mr.
substring_index(this_.`name`, ' ', 2)
Result: Mr. Adam
substring_index(this_.`name`, ' ', 3)
Result: Mr. Adam Johnson
substring_index(this_.`name`, ' ', -1)
Result: Johnson
substring_index(this_.`name`, ' ', -2)
Result: Adam Johnson
substring_index(this_.`name`, ' ', -3)
Result: Mr. Adam Johnson
substring_index(this_.`name`, ' ', 0)
Result: ก็จะแสดงค่าว่าง เนื่องจาก index ช่องที่ 0 ไม่มีอะไรเลย