Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ดึงส่วนแรกของรหัสไปรษณีย์ (ก่อน Space) ด้วย SUBSTRING

การใช้ SUBSTRING และ LOCATE หาส่วนแรก

ใช้ LOCATE(' ', PostCode) หาตำแหน่ง Space แรก แล้ว SUBSTRING(PostCode, 1, pos - 1) ดึงข้อความก่อน Space

ตัวอย่าง

mysql> create table DemoTable858(PostCode varchar(100));
Query OK, 0 rows affected (0.56 sec)
mysql> insert into DemoTable858 values('US90 456');
mysql> insert into DemoTable858 values('UK1 EN789343');
mysql> insert into DemoTable858 values('ENG78884 736454654');

คำสั่งดึงส่วนแรก

mysql> select substring(PostCode, 1, locate(' ', PostCode) - 1) as GetFirstPart from DemoTable858;

ผลลัพธ์:

+--------------+
| GetFirstPart |
+--------------+
| US90         |
| UK1          |
| ENG78884     |
+--------------+

คำอธิบาย

  • LOCATE(' ', 'US90 456') = 5 (ตำแหน่ง Space)
  • SUBSTRING('US90 456', 1, 5-1) = SUBSTRING(..., 1, 4) = 'US90'

วิธีอื่นๆ

-- ใช้ SUBSTRING_INDEX (ง่ายกว่า)
SELECT SUBSTRING_INDEX(PostCode, ' ', 1) FROM DemoTable858;

-- ใช้ LEFT + LOCATE
SELECT LEFT(PostCode, LOCATE(' ', PostCode) - 1) FROM DemoTable858;

⚠️ กรณีไม่มี Space

LOCATE คืน 0 -> SUBSTRING(..., 1, -1) คืน Empty String ควรเพิ่มเงื่อนไข:

SELECT CASE 
    WHEN LOCATE(' ', PostCode) > 0 
    THEN SUBSTRING(PostCode, 1, LOCATE(' ', PostCode) - 1)
    ELSE PostCode
END FROM DemoTable858;

สรุป

ใช้ SUBSTRING_INDEX(PostCode, ' ', 1) วิธีง่ายที่สุด ดึงส่วนก่อน Delimiter ตัวแรก (รองรับกรณีไม่มี Delimiter ให้คืนทั้งสตริง)