งั้นสอนสดๆ เลย ละกัน
ถ้าบางทีเราจะ query data บางส่วนของคำนั้นๆ เช่น
id | data
1 | hello
2 | love
3 | Jubz
เราอยากรู้ว่าคำที่มีตัว e อยู่ใน data มีกี่อัน
เราจะ query ดังนี้
select *
from tableName
where data
LIKE '%e
%'จบครับ
ปล. ข้อควรระวังจะด้วย
ถ้าเรารับ parameter มาจากภายนอกจะต้องเขียนดังนี้
select *
from tableName
where data LIKE '%' + @query_parameter + '%'
ขอเสริมจากคุณเอจ้า..
วิธี apply นะคะ
ก็ เอาไปใช้ในการ search หาได้
เช่น สมมติว่าเรามีข้อมูลชื่อลูกค้าอยู่ใน database ทีนี้เราจะหาข้อมูลลูกค้าคนนึง
จำได้คลับคล้ายคลับคลาว่าขึ้นต้นด้วย "สม"
เราก็ค้นแบบนี้นะคะ
"select * from tablename where fieldname like '
สม%'";
ก็จะแสดงชื่อคนที่ขึ้นต้นด้วยคำว่า "สม" นะคะ
ฉะนั้นตัวอย่างนี้
ถ้าเกิดดันมีคนชื่อที่ประกอบด้วยคำว่า "สม" อยู่ในชื่อ แต่ไม่ได้ขึ้นต้นด้วยคำว่า "สม" ก็จะไม่แสดงค่ะจากตัวอย่าง % ก็จะแทนด้วยคำว่าใด ๆ หรืออื่น ๆ ที่เรานึกไม่ออก
เอาไปดัดแปลงอีกอย่างหนึ่งสำหรับคนที่ต้องการ
หาช่วงเวลา แล้วดันตั้ง doctype เป็น varchar หรือ char ก็สามารถเอา % ไป apply ใช้ได้เช่นกันค่ะ
(สำหรับคนที่ไม่ได้ set เป็น timestamp, date, datetime)
ตัวอย่าง อยากได้รายชื่อคนที่เกิดในช่วงเดือน มกราคม - กันยายน ปีไหนหรือวันที่ไหนก็ได้
1. สังเกตในฐานข้อมูลของตัวเองก่อนว่า เขาเก็บข้อมูลไว้รูปแบบไหน
เช่น บางทีเก็บวันเดือนปีเป็น ปี-เดือน-วัน หรือบางที่ก็เก็บเป็น ปี-วัน-เดือน
อาจจะใช้เครื่องหมาย : แทน - หรือใช้เลขกี่หลักในการแทนวันเดือนปี ใช้ปีค.ศ. หรือปี พ.ศ. ก็ต้องสังเกตดี ๆ นะคะ
2. เมื่อทราบรูปแบบแล้วก็ให้ลองเขียนคำสั่งค้นหาค่ะ
(สมมติตัวอย่างข้อมูลใน database เก็บเป็น 1993-01-22)
อย่างโจทย์บอกว่า อยากได้คนเกิดช่วงเดือนมกราคม - มีนาคม ก็ต้องเป็น เดือน 01 ถึง 03
คำสั่งก็จะเป็น >> "select * from tablename where birthday like '%-01-%' or birthday like '%-02-%' or birthday like '%-03-%'";
แปลคำสั่ง
select แปลว่า เลือก
* แปลว่า ทุก ๆ field
from แปลว่า จาก
tablename แปลว่า ชื่อตารางที่เราต้องการให้เลือก
where แปลว่า ตามเงื่อนไขที่
ิ
birthday แปลว่า ชื่อ field ที่เก็บข้อมูลวันเกิดไว้
like แปลว่า เหมือนหรือคล้าย
'%-01-%' แปลว่า คนที่เกิดเดือน 01 คือเดือนมกราคม ปีไหน วันที่เท่าไหร่ก็ได้
or แปลว่า หรือ
'%-02-%' แปลว่า คนที่เกิดเดือน 02 คือเดือนกุมภาพันธ์ ปีไหน วันที่เท่าไหร่ก็ได้
or แปลว่า หรือ
'%-03-%' แปลว่า คนที่เกิดเดือน 03 คือเดือนมีนาคม ปีไหน วันที่เท่าไหร่ก็ได้
ก็จะแสดงรายชื่อคนที่เกิดตั้งแต่เดือนมกราคม - มีนาคมให้ดูจ้า
ส่วนใครที่โชคดี set doctype เป็น date หรือ datetime ก็แค่ใส่
"select * from tablename where birthday between '%-01-01%' ... '%-03-31%'";
แปลค่ะ
ิ
between แปลว่า ระหว่าง
'%-01-01' แปลว่า ระยะเวลาเริ่มหา ปีใด ๆ ก็ได้ เดือน 1 วันที่ 1
... ไม่แน่ใจว่าใช้คำนี้ หรือใช้คำว่า to หรือ , หรือ and กันแน่ ใครลองคำสั่งนี้แล้วได้ผลยังไงมาแจ้งด้วยนะคะ
'%-03-31' แปลว่า ระยะเวลาสิ้นสุดที่จะหา คือ ปีใด ๆ ก็ได้ เืดือน 3 วันที่ 31