การแจ้งเตือน
ต้องการแจ้งเตือน 2 สัปดาห์ ว่าต้องคืนหนังสือ
กี่เล่มโดยเอาไปเทียบกับวันที่ที่ได้กำหนดไว้
sql ใช้คำสั่งอะไรคะ
sql เขียนไว้ ไม่มีค่าอะไรออกมาเยย
ค่าในฐานมีวันที่ 25/02/2553 กับ 15/02/2553
SELECT test_Categorydevice.Cd_Name, test_Typedevice.Device_Name,
test_Maintanance.Ma_Expire, test_detail.div_name
FROM test_Categorydevice INNER JOIN
test_Typedevice INNER JOIN
test_Maintanance ON test_Typedevice.Device_ID = test_Maintanance.Device_ID AND
test_Typedevice.div_id = test_Maintanance.div_id INNER JOIN
test_detail ON test_Maintanance.div_id = test_detail.div_id ON
test_Categorydevice.div_id = test_Maintanance.div_id AND
test_Categorydevice.Cd_ID = test_Maintanance.Cd_ID
WHERE (test_Maintanance.Ma_Expire BETWEEN GETDATE() AND DATEADD(Week, - 2, test_Maintanance.Ma_Expire))
กี่เล่มโดยเอาไปเทียบกับวันที่ที่ได้กำหนดไว้
sql ใช้คำสั่งอะไรคะ
sql เขียนไว้ ไม่มีค่าอะไรออกมาเยย
ค่าในฐานมีวันที่ 25/02/2553 กับ 15/02/2553
SELECT test_Categorydevice.Cd_Name, test_Typedevice.Device_Name,
test_Maintanance.Ma_Expire, test_detail.div_name
FROM test_Categorydevice INNER JOIN
test_Typedevice INNER JOIN
test_Maintanance ON test_Typedevice.Device_ID = test_Maintanance.Device_ID AND
test_Typedevice.div_id = test_Maintanance.div_id INNER JOIN
test_detail ON test_Maintanance.div_id = test_detail.div_id ON
test_Categorydevice.div_id = test_Maintanance.div_id AND
test_Categorydevice.Cd_ID = test_Maintanance.Cd_ID
WHERE (test_Maintanance.Ma_Expire BETWEEN GETDATE() AND DATEADD(Week, - 2, test_Maintanance.Ma_Expire))
อ่านะ ก็บอกว่า "ไม่มีค่าอะไรออกมาเยย"....
ถ้างั้น ก็ต้องตรวจสอบกับข้อมูลที่เก็บไว้ โครงสร้างฐานข้อมูล
ผมไม่แน่ใจว่า การใช้ INNER JOIN ในกรณีด้านบน จะถูกต้องหรือเปล่า คำแนะนนำที่ทำได้ง่ายๆ ก็คือ ให้ทดลองเขียน Query บน ตารางเดียวดูก่อน เพื่อตรวจสอบผลลัพท์ ก่อนจะทำการ JOIN ตาราง
FROM test_Maintanance
WHERE (test_Expire BETWEEN GETDATE() AND DATEADD(week, 2, test_Expire))
จริงๆค่าที่ออกมันน่าจะเป็นอยุ่ระหว่างวันที่
5/2/2553 -14/2/2553
แต่ค่าเอามาแสดงหมดเยยคะ
28/2/2553
1/3/2553
8/4/2553
ยกเว้นค่าที่น้อยกว่า 5/2/2553
2. ลองกำหนดค่าของวันที่ เป็นข้อความ แทนที่จะใช้ฟังก์ชั่น
3. ลองใช้ DATEADD(DAY, -14, test_Expire) แทน Week
SELECT test.Cd_Name, test.Device_Name,
test.Ma_Expire, test.div_name, test.Ma_ID,
test.Ma_Note
FROM test INNER JOIN
test INNER JOIN
test ON test.Device_ID = test.Device_ID AND
test.div_id = test.div_id INNER JOIN
test ON test.div_id = test.div_id ON
test.div_id = test.div_id AND
test.Cd_ID = test.Cd_ID
WHERE (test.Ma_Expire BETWEEN GETDATE() AND GETDATE() + 14)
SELECT GETDATE(), GETDATE() + 14 ดูว่าผลลัพท์ เป็นยังไง
ถ้าเป็น mysql ฟังก์ชั่นลักษณะประมาณนี้ผมก็ใช้บ่อย แต่ sql 2000 ผมไม่แน่ใจว่าต้องแปลงค่าก่อนหรือปล่า ใหลองทดลองใส่ช่วงเวลาที่เป็นตามกฏดู ถ้ามันทำงานได้ ก็ไม่มีปัญหาอะไรครับ