ตัวอย่าง การใช้งาน วันที่ ใน mysql และคำสั่ง เทคนิค การ query
เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdeeเงื่อนไขวันที่ วันที่ mysql
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ เงื่อนไขวันที่ วันที่ mysql
UPDATE! อัพเดทล่าสุด 14-03-2019
เพิ่มเติมเนื้อหา แล้วการประยุกต์
เพิ่มเติมเนื้อหา แล้วการประยุกต์
ไปที่ Copy
โครงสร้างฐานข้อมูลทดสอบ ประกอบคำอธิบาย
-- -- Table structure for table `tbl_mydata` -- CREATE TABLE `tbl_mydata` ( `id` int(11) NOT NULL, `name` varchar(1) DEFAULT NULL, `date1` datetime DEFAULT NULL, `date2` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `tbl_mydata` -- INSERT INTO `tbl_mydata` (`id`, `name`, `date1`, `date2`) VALUES (1, 'A', '2014-08-01 00:30:00', '2014-08-01 00:30:00'), (2, 'B', '2014-08-02 00:30:00', '2014-08-03 00:30:00'), (3, 'C', '2014-08-03 00:30:00', '2014-08-05 00:30:00'), (4, 'D', '2014-08-04 00:30:00', '2014-08-07 00:30:00'), (5, 'E', '2014-08-05 00:30:00', '2014-08-09 00:30:00'), (6, 'F', '2014-08-06 00:30:00', '2014-08-11 00:30:00'), (7, 'G', '2014-08-07 00:30:00', '2014-08-13 00:30:00'), (8, 'H', '2014-08-07 15:20:00', '2014-08-15 00:30:00'), (9, 'I', '2014-08-09 00:30:00', '2014-08-17 00:30:00'), (10, 'J', '2014-08-10 00:30:00', '2014-08-19 00:30:00'), (11, 'K', '2014-08-11 00:30:00', '2014-08-21 00:30:00'), (12, 'L', '2014-08-12 00:30:00', '2014-08-23 00:30:00'), (13, 'M', '2014-08-13 00:30:00', '2014-08-25 00:30:00'), (14, 'N', '2014-08-14 00:30:00', '2014-08-27 00:30:00'), (15, 'O', '2014-08-15 00:30:00', '2014-08-29 00:30:00'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_mydata` -- ALTER TABLE `tbl_mydata` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_mydata` -- ALTER TABLE `tbl_mydata` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16; COMMIT;
ให้รู้ข้อมูลเบื้องต้น
curdate() ใน mysql คือ วันที่ปัจจุบัน ไม่มีเวลา เช่น 2010-08-01
SELECT curdate()
now() ใน mysql คือ วันที่และเวลาปัจจุบัน เช่น 2014-08-01 00:01:00
SELECT now()
การเทียบข้อมูล เท่ากับ หรือไม่เท่ากับ =,!=
กรณีรูปแบบข้อมูลวันที่ ที่เก็บตรงกัน สามารถเปรียบเทียบค่าได้เลย
เช่น
datetime กับ datetime
หรือ
date กับ date
ในตารางฐานข้อมูลตัวอย่าง เราเก็บข้อมูลเป็น datetime
หากต้องการเปรียบ แบบ date สามารถทำได้ โดยใช้ คำสั่งฟังก์ชั่น date ใน mysql
เช่น
// สมมติ date1 เท่ากับ 2014-08-01 00:30:00
date(date1)='2014-08-01' // ก็จะแสดงข้อมุลตามเงื่อนไขวันที่ถูกต้อง
ชุดข้อมูลสำหรับทดสอบ
// การแสดงข้อมูลในสัปดาห์ โดยเริ่มจากวันจันทร์ ถึงวันอาทิตย์ // วิธีนี้ มีการใช้งาน php เพื่อกำหนดช่วง ของวัน // ตัวอย่างจากข้อมูล ในตารางมี ช่วงสัปดาห์ อยู่ 3 ช่วง // ช่วงที่ 1 วันที่ 1 ถึง 3 ช่วงวัน ศุกร์ เสาร์ อาทิตย์ // ช่วงที่ 2 วันที่ 4 ถึง 10 เต็มสัปดาห์ วัน จันทร์ถึงอาทิตย์ // ช่วงที่ 3 วันที่ 11 ถึง 15 ช่วงวั จันทร์ อังคาร พุธ พฤหัส ศุกร์ // ถ้าวันที่ตอนนี้คือ 2014-08-06 ดังนั้น ข้อมูลทั้งหมดที่จะแสดง คือ ข้อมูลสัปดาห์ ช่วงที่ 2 $startWeekDay_back=(date("w",strtotime("2014-08-06"))!=0)?-(date("w",strtotime("2014-08-06")))+1:-7; $startWeekDay_next=(date("w",strtotime("2014-08-06"))!=0)?7-(date("w",strtotime("2014-08-06"))):0; $q=" SELECT * FROM tbl_mydata WHERE date(date1)>=date_add('2014-08-06',interval ".$startWeekDay_back." day) AND date(date1)<=date_add('2014-08-06',interval ".$startWeekDay_next." day) ";
// วิธีที่สอง วิธีนี้ ใช้การจัดการในคำสั่ง โดยใช้ YEARWEEK(date,[mode]) ฟังก์ชั่น // โดยฟังก์ชั่นนี้ จะคืนค่าเป็น ปีสี่หลักต่อด้วยตัวเลขสัปดาห์ เช่น // SELECT YEARWEEK('2014-08-06',3) จะเท่ากับ 201432 คือปี 2014 และสัปดาห์ที่ 32 // ค่า mode เรากำหนด 3 เพื่อให้จำนวนสัปดาห์เริ่มที่วันจันทร์ มีสัปดาห์ตั้งแต่ 1-53 // ถ้าจะหาว่าวันนี้เป็นปีและสัปดาห์ที่เท่าไหร่ ก็กำหนดเป็น // SELECT YEARWEEK(CURDATE(),3) // ดังนั้น เราจะใช้ค่านี้ ในการกำหนดวันในสัปดาห์ เพราะวันที่ในสัปดาห์เดียวกัน จะมีค่า YEARWEEK เท่ากัน // เราจะได้คำสั่ง sql ง่ายๆ ดังนี้ SELECT * FROM tbl_mydata WHERE YEARWEEK(date(date1),3)=YEARWEEK('2014-08-06',3) // วิธ๊นี้ง่ายที่สุด เมื่อเทียบกับกรณีกำหนดเงื่อนไขด้วย php ซึ่งผลลัพธ์ที่ได้ก็จะเหมือนกัน
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// ถ้าวันที่ตอนนี้คือ 2014-08-10 แสดงข้อมูลวันที่ ย้อนหลัง 1 สัปดาห์ รวมวันปัจจุบัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add('2014-08-10',interval -1 week) AND date(date1)<=curdate() // .ใช้แบบนี้แทนได้ ถ้า วันที่กำหนดคือวันที่ปัจจุบัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add(curdate(),interval -1 week) AND date(date1)<=curdate()
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// ถ้าวันที่ตอนนี้คือ 2014-08-10 แสดงข้อมูลวันที่ ย้อนหลัง 4 วัน และล่วงหน้า 4 วัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add('2014-08-10',interval -4 day) AND date(date1)<=date_add('2014-08-10',interval 4 day) // .ใช้แบบนี้แทนได้ ถ้า วันที่กำหนดคือวันที่ปัจจุบัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add(curdate(),interval -4 day) AND date(date1)<=date_add(curdate(),interval 4 day)
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// ถ้าวันที่ตอนนี้คือ 2014-08-10 แสดงข้อมูลวันที่ ล่วงหน้า 4 วัน (ต้องมีข้อมูลของวันที่ล่วงหน้า // ข้อมูลถึงจะแสดง ) SELECT * FROM tbl_mydata WHERE date(date1)>='2014-08-10' AND date(date1)<=date_add('2014-08-10',interval 4 day) // .ใช้แบบนี้แทนได้ ถ้า วันที่กำหนดคือวันที่ปัจจุบัน SELECT * FROM tbl_mydata WHERE date(date1)>=curdate() AND date(date1)<=date_add(curdate(),interval 4 day)
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// ถ้าวันที่ตอนนี้คือ 2014-08-10 แสดงข้อมูลวันที่ ย้อนหลัง 4 วัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add('2014-08-10',interval -4 day) AND date(date1)<='2014-08-10' // .ใช้แบบนี้แทนได้ ถ้า วันที่กำหนดคือวันที่ปัจจุบัน SELECT * FROM tbl_mydata WHERE date(date1)>=date_add(curdate(),interval -4 day) AND date(date1)<=curdate()
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// วันที่อยู่ในช่วง วันที่และเวลาที่กำหนด SELECT * FROM tbl_mydata WHERE date1>='2014-08-02 00:30:00' AND date1<='2014-08-05 00:30:00' // หรือใช้ BETWEEN ... AND .... SELECT * FROM tbl_mydata WHERE date1 BETWEEN '2014-08-02 00:30:00' AND '2014-08-05 00:30:00'
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// วันที่มากกว่า วันที่และเวลาที่กำหนด SELECT * FROM tbl_mydata WHERE date1>'2014-08-07 00:30:00'
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// ดูเฉพาะวันที่ที่ตรงกันกับวันที่ที่กำหนด เวลาใดก็ได้ SELECT * FROM tbl_mydata WHERE date(date1)='2014-08-07'
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
// วันที่และเวลา เท่ากับวันที่ที่กำหนด SELECT * FROM tbl_mydata WHERE date1='2014-08-04 00:30:00'
ID | Name | Date1 | Date2 |
1 | A | 2014-08-01 00:30:00 | 2014-08-01 00:30:00 |
2 | B | 2014-08-02 00:30:00 | 2014-08-03 00:30:00 |
3 | C | 2014-08-03 00:30:00 | 2014-08-05 00:30:00 |
4 | D | 2014-08-04 00:30:00 | 2014-08-07 00:30:00 |
5 | E | 2014-08-05 00:30:00 | 2014-08-09 00:30:00 |
6 | F | 2014-08-06 00:30:00 | 2014-08-11 00:30:00 |
7 | G | 2014-08-07 00:30:00 | 2014-08-13 00:30:00 |
8 | H | 2014-08-07 15:20:00 | 2014-08-15 00:30:00 |
9 | I | 2014-08-09 00:30:00 | 2014-08-17 00:30:00 |
10 | J | 2014-08-10 00:30:00 | 2014-08-19 00:30:00 |
11 | K | 2014-08-11 00:30:00 | 2014-08-21 00:30:00 |
12 | L | 2014-08-12 00:30:00 | 2014-08-23 00:30:00 |
13 | M | 2014-08-13 00:30:00 | 2014-08-25 00:30:00 |
14 | N | 2014-08-14 00:30:00 | 2014-08-27 00:30:00 |
15 | O | 2014-08-15 00:30:00 | 2014-08-29 00:30:00 |
เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 14-03-2019
แนวทางประยุกต์เพิ่มเติม
// แสดงเพราะวันที่เป็นเสาร์อาทิตย์ สามารถใช้ฟังก์ชั่น WEEKDAY(date) หรือ DAYOFWEEK(date) // โดยถ้าเป็น WEEKDAY(date) ค่า (0 = Monday, 1 = Tuesday, … 6 = Sunday) // และถ้าเป็น DAYOFWEEK(date) ค่า (1 = Sunday, 2 = Monday, …, 7 = Saturday). SELECT * FROM tbl_mydata WHERE WEEKDAY(date(date1)) IN (5,6) // หรือ SELECT * FROM tbl_mydata WHERE DAYOFWEEK(date(date1)) IN (1,7) // หรือถ้าต้องการแสดงเฉพาะวันใดๆ ก็สามารถกำหนดตัวเลขที่ต้องการลงใน IN () ถ้าเลือกหลายวัน // ก็คั่นด้วย , เช่น (1,2,4) // ถ้าต้องการเลือกวันที่ตรงข้าม เช่นถ้าต้องการวันธรรมดาไม่ใช่เสาร์อาทิตย์ แทนที่เราจะกำหนด SELECT * FROM tbl_mydata WHERE WEEKDAY(date(date1)) IN (0,1,2,3,4) // ก็ใช้แบบ NOT IN () แทนได้ ก็จะได้เป็น SELECT * FROM tbl_mydata WHERE WEEKDAY(date(date1)) NOT IN (5,6)
// เราสามารถใช้ฟังก์ชั่น WEEKDAY() ในเงื่อนไข GROUP BY กรณีต้องการหาผลรวมเฉพาะรายการในวันนั้นๆ // เช่นสมมติเราอยากรู้ว่า ยอดรวมของวันจันทร์ทั้งหมดเป็นเท่าไหร่ ก็จะใช้เป็น SELECT SUM(id),date1 FROM tbl_mydata GROUP BY WEEKDAY(date(date1)) HAVING WEEKDAY(date(date1)) IN(0) // หรือ SELECT SUM(id),date1,WEEKDAY(date(date1)) FROM tbl_mydata GROUP BY WEEKDAY(date(date1)) HAVING WEEKDAY(date(date1)) IN(0)
// * หากมีการกำหนด HAVING เราต้อง select ฟิลด์ข้อมูลนั้นๆ มาด้วย ถึงแม้จะไม่ได้ใช้งานก็ตาม // อย่างข้างต้น เรามี SELECT date1 มาด้วย ไม่เช่นนั้นจะ error เช่น SELECT SUM(id),WEEKDAY(date(date1)) FROM tbl_mydata GROUP BY WEEKDAY(date(date1)) HAVING WEEKDAY(date(date1)) IN(0) // ตัวอย่างนี้จะ error เพราะไม่มีการ select date1 มาด้วย ทำให้ไม่มีฟิลด์ date1 ที่จะถูกเรียกใช้ใน HAVING
เพิ่มเติมเนื้อหา ครั้งที่ 2 วันที่ 14-03-2019
ฟังก์ชั่น STR_TO_DATE()
เราสามารถใช้ฟังก์ชั่น STR_TO_DATE() จัดการกับข้อมูลที่ส่งมา เพื่อให้อยู่ในรูปแบบวันที่
ได้ โดยไม่ต้องจัดรูปแบบด้วยฟังก์ชั่น php ใดๆ
อย่างสมมติเช่น เราเลือกรายการวันที่ ในฟอร์มก่อนส่งข้อมูลมาเป็น วัน/เดือน/ปี
ยกตัวอย่าง 06/08/2014 ซึ่งถ้าเราจัดรูปแบบก่อนส่ง เป็น 2014-08-06 เราก็จะสามารถใช้รูปแบบนี้
เข้าไปร่วมกับคำสั่งคิวรี่ใน sql ได้เลย แต่ในที่นี้ จะแนะนำอีกวิธี ที่เราใช้การจัดรูปแบบในคำสั่ง sql
ได้เลย โดยข้อมูลที่เราส่งมา ก็ไม่ต้องเปลี่ยนแปลงก่อนส่ง จะได้เป็นดังนี้
SELECT * FROM tbl_mydata WHERE date(date1)>=STR_TO_DATE('06/08/2014','%d/%m/%Y')
สมมติว่าตัวแปรวันที่เราส่งมาในตัวแปร $_POST['date1'] ส่งมาในรูปแบบ 06/08/2014
คำสั่งใน sql ก็จะเป็น
$sql = " SELECT * FROM tbl_mydata WHERE date(date1)>=STR_TO_DATE('".$_POST['date1']."','%d/%m/%Y') ";
ซึ่งถ้า echo ค่าคำสั่ง sql ออกมา ก็จะเป็น
SELECT * FROM tbl_mydata WHERE date(date1)>2014-08-06
การใช้งาน STR_TO_DATE() ก็จะกำหนดค่า 2 parameter คือวันที่ที่ส่งมา กับรูปแบบของวันที่ที่ส่งมา
อย่าง 06/08/2014 ก็จะเป็น %d/%m/%Y
รูปแบบการระบุ ค่าต่างๆ ดูเพิ่มเติม จากตารางด้าานล่าง
การระบุ | คำอธิบาย |
---|---|
%a |
ชื่อวันแบบย่อ 3 ตัวอักษร
(Sun ..Sat ) |
%b |
ชื่อเดือนแบบย่อ 3 ตัวอักษร (Jan ..Dec ) |
%c |
เดือนเป็นตัวเลข, (0 ..12 ) |
%D |
วันที่ของเดือนนั้นต่อท้ายด้วยการระบุลำดับในภาษาอังกฤษ (0th , 1st , 2nd , 3rd , …) |
%d |
วันที่ของเดือน 2 ตัวอักษร(00 ..31 ) |
%e |
วันที่ของเดือน ตัวเลข (0 ..31 ) |
%f |
วินาทีหน่ายไมโคร (000000 ..999999 ) |
%H |
ชั่วโมง 2 ตัวอักษร รูปแบบ 24 ชม.(00 ..23 ) |
%h |
ชั่วโมง 2 ตัวอักษร รูปแบบ 12 ชม. (01 ..12 ) |
%I |
ชั่วโมง 2 ตัวอักษร รูปแบบ 12 ชม. (01 ..12 ) |
%i |
นาที 2 ตัวอักษร (00 ..59 ) |
%j |
ลำดับวันใน 1 ปี 3 ตัวอักษร (001 ..366 ) |
%k |
ชั่วโมง ตัวเลข รูปแบบ 24 ชม. (0 ..23 ) |
%l |
ชั่วโมง ตัวเลข รูปแบบ 12 ชม. (1 ..12 ) |
%M |
ชื่อเดือนแบบเต็ม (January ..December ) |
%m |
เดือน 2 ตัวอักษร, (00 ..12 ) |
%p |
ก่อนเที่ยง หรือ หลังเที่ยง AM or PM |
%r |
เวลา รูปแบบ 12 ชม. มี AM หรือ PM ต่อท้าย (hh:mm:ss followed by AM or PM ) |
%S |
วินาที 2 ตัวอักษร (00 ..59 ) |
%s |
วินาที 2 ตัวอักษร (00 ..59 ) |
%T |
เวลา รูปแบบ 24 ชม. (hh:mm:ss ) |
%U |
ลำดับสัปดาห์่ 2 ตัวอักษร (00 ..53 ), เมื่อให้วัน อาทิตย์ เป็นวันแรกของสัปดาห์ WEEK() mode 0 |
%u |
ลำดับสัปดาห์่ (00 ..53 ), เมื่อให้ วันจันทร์ เป็นวันแรกของสัปดาห์ WEEK() mode 1 |
%V |
ลำดับสัปดาห์่ (01 ..53 ), เมื่อให้ วันอาทิตย์ เป็นวันแรกของสัปดาห์ WEEK() mode 2; ใช้ร่วมกับ %X |
%v |
ลำดับสัปดาห์่ (01 ..53 ), เมื่อให้ วันจันทร์ เป็นวันแรกของสัปดาห์ WEEK() mode 3; ใช้ร่วมกับ %x |
%W |
ชื่อวันแบบเต็ม (Sunday ..Saturday ) |
%w |
เลขวันในสัปดาห์
(0 =Sunday..6 =Saturday) |
%X |
เลขปี 4 หลักของสัปดาห์ที่ใช้ วันอาทิตย์ เป็นวันแรก ใช้ร่วมกับ %V |
%x |
เลขปี 4 หลักของสัปดาห์ที่ใช้ วันจันทร์ เป็นวันแรก ใช้ร่วมกับ %v |
%Y |
เลขปี ค.ศ. 4 ตัวอักษร |
%y |
เลขปี ค.ศ. 2 ตัวอักษร ท้าย |
%% |
แทนตัวอักษร % |
% |
x , แทนตัวอักษรใดๆ โดย“x ” คือค่าที่ไม่ได้ระบุตามเงื่อนไขด้านบน |
กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ

เนื้อหาที่เกี่ยวข้อง
-
18 Mar2010การเก็บข้อมูลวันที่ ในฐานข้อมูล กับคำสั่ง sql ในการค้นหา อ่าน 41,845
การกำหนดประเภทของ field ในตารางฐานข้อมูลเป็น date หรือ datetime ทำให้เราสามารถ
-
17 Jan2011เทคนิค วิธี การแสดงข้อมูล ด้วยเงื่อนไข วันที่ date ใน mysql อ่าน 89,859
กำหนดให้แสดงรายการข้อมูลของวันที่ปัจจุบัน ถ้าเก็บข้อมูลเป็นแบบ DATE ตัวอย่าง
-
11 Jan2012รู้จัก และใช้งาน DATEDIFF() ใน mysql ฟังก์ชัน เทียบช่วงเวลาที่เหลือ อ่าน 80,883
datediff() เป็น ฟังก์ชันเกี่ยวกับวันที่ของ mysql ใช้สำหรับหาค่าต่างของวันท
-
กำลังอ่านเนื้อหานี้อยู่08 Sep2014ตัวอย่าง การใช้งาน วันที่ ใน mysql และคำสั่ง เทคนิค การ query อ่าน 52,817
โครงสร้างฐานข้อมูลทดสอบ ประกอบคำอธิบาย -- -- Table structu
-
15 Jun2017แนวทางการจัดรูปแบบข้อความวันที่ ให้อยู่ในรูปแบบมาตรฐาน ใน php อ่าน 7,281
เนื้อหาต่อไปนี้จะเป็นแนวทางรูปแบบต่างๆ ที่ใช้ในการจัดรูปแบบวันที่ ซึ่งเป็นรูป
URL สำหรับอ้างอิง
Top
Copy
ขอบคุณทุกการสนับสนุน
![]()