วันนี้ฉันพบปัญหาในที่ทำงาน ฉันต้องสืบค้นตามเวลา แต่ผลลัพธ์ของการสืบค้นไม่ถูกต้อง ตัวอย่างเช่น หากต้องการค้นหาสมาชิกที่ลงทะเบียนบนเว็บไซต์ระหว่างวันที่ 10-10-2550 ถึง 31-10-2550 หลังจากเลือกวันที่แล้ว ให้คลิกปุ่ม "สอบถาม" เพื่อค้นหาสมาชิกที่ลงทะเบียนในวันที่ 31-10-2550 ข้อมูลจะไม่แสดงเลย และผลลัพธ์จะเหมือนกันหลังจากการทดสอบหลายครั้ง ดีบักเกอร์พบว่ามีปัญหากับคำสั่ง SQL
คำสั่ง SQL เป็นดังนี้: SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31' ดูเผินๆ ดูเหมือนจะไม่มีข้อผิดพลาดในคำสั่ง SQL นี้ แต่หลังจากเปรียบเทียบค่าที่บันทึกไว้ในช่องที่เกี่ยวข้องในฐานข้อมูลแล้ว พบว่าค่าที่บันทึกไว้ไม่อยู่ในรูปของค่าธรรมดา date แต่ในรูปแบบของวันที่ + เวลา นั่นคือ: yyyy-MM-dd HH:mm :ss เมื่อคำสั่ง SQL กำหนดขนาดของ regtime และ '2007-10-31' มันจะคิดว่า '2007- 10-31' เขียนไม่ครบถ้วน ดังนั้นทั้งสองค่าจะไม่ถือว่าเท่ากัน จะทำอย่างไร?
ไม่ต้องกังวล ASP มีฟังก์ชันการบวกและการลบวันที่เพื่อช่วยเราแก้ไขปัญหานี้
1. การเพิ่มวันที่
ฟังก์ชัน DateAdd จะส่งคืนวันที่ซึ่งมีการเพิ่มช่วงเวลาที่ระบุ
DateAdd(ช่วงเวลา, ตัวเลข, วันที่)
ไวยากรณ์ของฟังก์ชัน DateAdd มีพารามิเตอร์ต่อไปนี้ (1) จำเป็นต้องมีช่วงเวลา นิพจน์สตริงที่แสดงถึงช่วงเวลาที่จะเพิ่ม ดูส่วนการตั้งค่าสำหรับค่าต่างๆ
(2) ต้องระบุหมายเลข นิพจน์ตัวเลขที่ระบุจำนวนช่วงเวลาที่จะเพิ่ม นิพจน์ตัวเลขอาจเป็นค่าบวก (รับวันที่ในอนาคต) หรือค่าลบ (รับวันที่ในอดีต)
(3) ต้องระบุวันที่ ตัวแปรหรือข้อความที่แสดงวันที่ที่จะเพิ่มช่วงเวลา
คำอธิบาย คุณสามารถใช้ฟังก์ชัน DateAdd เพื่อเพิ่มหรือลบช่วงเวลาที่ระบุจากวันที่ได้ ตัวอย่างเช่น คุณสามารถใช้ DateAdd เพื่อคำนวณวันที่ 30 วันนับจากวันนี้หรือเวลา 45 นาทีนับจากนี้ หากต้องการเพิ่มช่วงเวลาเป็น "วัน" จนถึงปัจจุบัน คุณสามารถใช้ "วันของปี" ("y"), "วัน" ("d") หรือ "วันในสัปดาห์" ("w")
ฟังก์ชัน DateAdd ไม่ส่งคืนวันที่ที่ไม่ถูกต้อง ตัวอย่างต่อไปนี้บวกหนึ่งเดือนเป็นวันที่ 31 มกราคม 1995:
NewDate = DateAdd("m", 1, "31-Jan-95")
ในตัวอย่างนี้ DateAdd จะส่งกลับวันที่ 28 กุมภาพันธ์ 1995 ไม่ใช่ 31 กุมภาพันธ์ 1995 ถ้าวันที่คือ 31 มกราคม 1996 29 กุมภาพันธ์ 1996 จะถูกส่งกลับเนื่องจากปี 1996 เป็นปีอธิกสุรทิน
หากวันที่คำนวณอยู่ก่อน AD 100 จะเกิดข้อผิดพลาด
ถ้าตัวเลขไม่ใช่ค่าแบบยาว ระบบจะปัดเศษให้เป็นจำนวนเต็มที่ใกล้ที่สุดก่อนคำนวณ
2. การลบวันที่ ฟังก์ชัน DateDiff จะส่งกลับช่วงเวลาระหว่างวันที่สองวัน
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
ไวยากรณ์ของฟังก์ชัน DateDiff มีพารามิเตอร์ต่อไปนี้:
(1) ต้องมีช่วงเวลา นิพจน์สตริงที่ใช้ในการคำนวณช่วงเวลาระหว่าง date1 และ date2 ดูส่วนการตั้งค่าสำหรับค่าต่างๆ
(2) จำเป็นต้องระบุ date1, date2 การแสดงออกวันที่ สองวันที่ใช้ในการคำนวณ
(3) เลือกวันแรกของสัปดาห์หรือไม่ก็ได้ ค่าคงที่ที่ระบุวันแรกของสัปดาห์ หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นเป็นวันอาทิตย์ ดูส่วนการตั้งค่าสำหรับค่าต่างๆ
(4) สัปดาห์แรกของปี เป็นตัวเลือก ค่าคงที่ที่ระบุสัปดาห์แรกของปี หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นเป็นสัปดาห์ของวันที่ 1 มกราคม ดูส่วนการตั้งค่าสำหรับค่าต่างๆ
คำอธิบาย ฟังก์ชัน DateDiff ใช้เพื่อกำหนดจำนวนช่วงเวลาที่ระบุที่มีอยู่ระหว่างวันที่สองวัน ตัวอย่างเช่น คุณสามารถใช้ DateDiff เพื่อคำนวณจำนวนวันระหว่างวันที่สองวัน หรือจำนวนสัปดาห์ระหว่างวันที่วันนี้และวันสุดท้ายของปี
ในการคำนวณจำนวนวันระหว่างวันที่ 1 และวันที่ 2 คุณสามารถใช้ "วันในปี" ("y") หรือ "วัน" ("d") เมื่อช่วงเวลาคือ "วันในสัปดาห์" ("w") DateDiff จะส่งกลับจำนวนสัปดาห์ระหว่างวันที่สองวัน ถ้า date1 เป็นวันจันทร์ DateDiff จะนับจำนวนวันจันทร์ก่อน date2 ผลลัพธ์นี้มี date2 แต่ไม่ใช่ date1 ถ้าช่วงเป็น "สัปดาห์" ("ww") ฟังก์ชัน DateDiff จะส่งกลับจำนวนสัปดาห์ระหว่างวันที่สองวันในตารางปฏิทิน ฟังก์ชันนับจำนวนวันอาทิตย์ระหว่างวันที่ 1 ถึงวันที่ 2 DateDiff จะประเมิน date2 ถ้า date2 เป็นวันอาทิตย์ แต่ไม่ใช่ date1 แม้ว่า date1 จะเป็นวันอาทิตย์ก็ตาม
ถ้า date1 มาช้ากว่า date2 ฟังก์ชัน DateDiff จะส่งกลับตัวเลขลบ
อาร์กิวเมนต์ firstdayofweek ส่งผลต่อการคำนวณโดยใช้สัญลักษณ์ตัวคั่น "w" และ "ww"
ถ้า date1 หรือ date2 เป็นวันที่ตามตัวอักษร ปีที่ระบุจะกลายเป็นส่วนที่คงที่ของวันที่ แต่ถ้า date1 หรือ date2 อยู่ในเครื่องหมายคำพูด (" ") และไม่ได้ระบุปี ปีปัจจุบันจะถูกแทรกทุกครั้งที่มีการประเมินนิพจน์ date1 หรือ date2 ในโค้ด ทำให้สามารถเขียนโค้ดโปรแกรมที่ทำงานในแต่ละปีได้
เมื่อช่วงเวลาคือ "ปี" ("yyyy") ให้เปรียบเทียบวันที่ 31 ธันวาคมกับวันที่ 1 มกราคมของปีถัดไป แม้ว่าความแตกต่างที่แท้จริงจะมีเพียงวันเดียว แต่ DateDiff จะส่งกลับ 1 ซึ่งบ่งชี้ถึงความแตกต่างหนึ่งปี