วันนี้ฉันพบปัญหาในที่ทำงาน ฉันต้องสืบค้นตามเวลา แต่ผลลัพธ์ของการสืบค้นไม่ถูกต้อง เช่นหากต้องการทราบสมาชิกที่ลงทะเบียนกับเว็บไซต์ระหว่างวันที่ 12-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) ต้องระบุวันที่ ตัวแปรหรือข้อความที่แสดงวันที่ที่จะเพิ่มช่วงเวลา
ตั้งค่า
พารามิเตอร์ช่วงเวลาสามารถมีค่าต่อไปนี้:
คำอธิบายการตั้งค่า
เย้ ปี
คิวไตรมาส
เดือน
y จำนวนวันในหนึ่งปี
ดีวัน
วันในสัปดาห์
สัปดาห์
ชม
n นาที
วินาที
แสดงให้เห็น
คุณสามารถใช้ฟังก์ชัน DateAdd เพื่อเพิ่มหรือลบช่วงเวลาที่ระบุจากวันที่ได้ ตัวอย่างเช่น คุณสามารถใช้ DateAdd เพื่อคำนวณวันที่ 30 วันนับจากวันปัจจุบันหรือเวลา 45 นาทีนับจากนี้ หากต้องการเพิ่มช่วงเวลาเป็นวันถึงวันที่ คุณสามารถใช้วันของปี (y) วัน (d) หรือวันในสัปดาห์ (w)
ฟังก์ชัน DateAdd ไม่ส่งคืนวันที่ที่ไม่ถูกต้อง ตัวอย่างต่อไปนี้บวกหนึ่งเดือนเป็นวันที่ 31 มกราคม 1995:
NewDate = DateAdd(ม., 1, 31-ม.ค.-95)
ในตัวอย่างนี้ DateAdd จะส่งกลับวันที่ 28 กุมภาพันธ์ 1995 ไม่ใช่ 31 กุมภาพันธ์ 1995 ถ้าวันที่คือ 31 มกราคม 1996 29 กุมภาพันธ์ 1996 จะถูกส่งกลับเนื่องจากปี 1996 เป็นปีอธิกสุรทิน
หากวันที่คำนวณอยู่ก่อน AD 100 จะเกิดข้อผิดพลาดขึ้น
ถ้าตัวเลขไม่ใช่ค่าแบบยาว ระบบจะปัดเศษให้เป็นจำนวนเต็มที่ใกล้ที่สุดก่อนคำนวณ
2. การลบวันที่
ฟังก์ชัน DateDiff
ส่งกลับช่วงเวลาระหว่างวันที่สองวัน
DateDiff(ช่วง, date1, date2 [, firstdayofweek[, firstweekofyear]])
ไวยากรณ์ของฟังก์ชัน DateDiff มีพารามิเตอร์ต่อไปนี้:
(1) ต้องมีช่วงเวลา นิพจน์สตริงที่ใช้ในการคำนวณช่วงเวลาระหว่าง date1 และ date2 ดูส่วนการตั้งค่าสำหรับค่าตัวเลข
(2) จำเป็นต้องระบุ date1, date2 การแสดงออกวันที่ สองวันที่ใช้ในการคำนวณ
(3) เลือกวันแรกของสัปดาห์หรือไม่ก็ได้ ค่าคงที่ที่ระบุวันแรกของสัปดาห์ หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นเป็นวันอาทิตย์ ดูส่วนการตั้งค่าสำหรับค่าตัวเลข
(4) สัปดาห์แรกของปี เป็นตัวเลือก ค่าคงที่ที่ระบุสัปดาห์แรกของปี หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นเป็นสัปดาห์ของวันที่ 1 มกราคม ดูส่วนการตั้งค่าสำหรับค่าตัวเลข
ตั้งค่า
พารามิเตอร์ช่วงเวลาสามารถมีค่าต่อไปนี้:
คำอธิบายการตั้งค่า
เย้ ปี
คิวไตรมาส
เดือน
y จำนวนวันในหนึ่งปี
ดีวัน
วันในสัปดาห์
สัปดาห์
ชม
n นาที
วินาที
พารามิเตอร์ firstdayofweek สามารถมีค่าต่อไปนี้:
คำอธิบายค่าคงที่
vbUseSystem 0 ใช้การตั้งค่า API การสนับสนุนภาษาประจำชาติ (NLS)
vbวันอาทิตย์ 1 วันอาทิตย์ (ค่าเริ่มต้น)
vbวันจันทร์ที่ 2 วันจันทร์
vbวันอังคารที่ 3 วันอังคาร
vbวันพุธที่ 4 วันพุธ
vbวันพฤหัสบดีที่ 5 วันพฤหัสบดี
vbวันศุกร์ที่ 6 วันศุกร์
vbวันเสาร์ที่ 7 วันเสาร์
พารามิเตอร์ firstweekofyear สามารถมีค่าต่อไปนี้:
คำอธิบายค่าคงที่
vbUseSystem 0 ใช้การตั้งค่า API การสนับสนุนภาษาประจำชาติ (NLS)
vbFirstJan1 1 เริ่มต้นด้วยสัปดาห์ของวันที่ 1 มกราคม (ค่าเริ่มต้น)
vbFirstFourDays 2 เริ่มต้นด้วยสัปดาห์แรกของปีใหม่ที่มีอย่างน้อยสี่วัน
vbFirstFullWeek 3 เริ่มต้นด้วยสัปดาห์แรกของปีใหม่เต็ม
แสดงให้เห็น
ฟังก์ชัน DateDiff ใช้เพื่อกำหนดจำนวนช่วงเวลาที่ระบุที่มีอยู่ระหว่างวันที่สองวัน ตัวอย่างเช่น คุณสามารถใช้ DateDiff เพื่อคำนวณจำนวนวันระหว่างวันที่สองวัน หรือจำนวนสัปดาห์ระหว่างวันที่วันนี้และวันสุดท้ายของปี
ในการคำนวณจำนวนวันระหว่างวันที่ 1 ถึงวันที่ 2 คุณสามารถใช้จำนวนวันในหนึ่งปี (y) หรือวัน (d) เมื่อ Interval คือจำนวนวันในสัปดาห์ (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 ในโค้ด ทำให้สามารถเขียนโค้ดโปรแกรมที่ทำงานในแต่ละปีได้
เมื่อช่วงเวลาคือปี (ปปปป) ให้เปรียบเทียบวันที่ 31 ธันวาคมกับวันที่ 1 มกราคมของปีถัดไป แม้ว่าความแตกต่างที่แท้จริงจะมีเพียงวันเดียว แต่ DateDiff จะส่งกลับ 1 ซึ่งแสดงถึงส่วนต่างของหนึ่งปี