การเปรียบเทียบสตริงวันที่กับ DATETIME ใน SQL Server
เมื่อทำงานกับฐานข้อมูล โดยเฉพาะใน SQL Server คุณอาจพบว่าตัวเองต้องการกรองบันทึกตามวันที่เฉพาะ อย่างไรก็ตาม หากวันที่และเวลาของคุณถูกเก็บไว้ในคอลัมน์ DATETIME
คำสั่งของคุณอาจยุ่งยาก โดยเฉพาะเมื่อคุณต้องการละเว้นส่วนของเวลาของวันที่ ในโพสต์บล็อกนี้ เราจะสำรวจเทคนิคที่มีประสิทธิภาพเพื่อเลือกบันทึกสำหรับวันเฉพาะโดยหลีกเลี่ยงปัญหาที่เกี่ยวข้องกับส่วนของเวลา
ปัญหา: การเลือกบันทึกตามวันที่
ลองสมมติว่าคุณมีคอลัมน์ DATETIME
ที่เรียกว่า column_datetime
ในตารางของคุณ ซึ่งมีค่าเก็บทั้งวันที่และเวลา ตัวอย่างเช่น:
'14 AUG 2008 14:23:01'
ตอนนี้คุณต้องการเลือกบันทึกทั้งหมดสำหรับวันเฉพาะ เช่น 14 AUG 2008
หากคุณพยายามใช้คำสั่งที่เปรียบเทียบค่าของ DATETIME
โดยตรงกับวันที่เพียงอย่างเดียวเช่นนี้:
DECLARE @p_date DATETIME
SET @p_date = CONVERT(DATETIME, '14 AUG 2008', 106)
SELECT *
FROM table1
WHERE column_datetime = @p_date
คุณอาจจะไม่ได้รับแถวใดๆ เป็นต้น เนื่องจากคำสั่งกำลังมองหาการตรงกันอย่างแม่นยำรวมถึงเวลา ซึ่งอาจไม่มีอยู่สำหรับบันทึกเฉพาะที่คุณกำลังสอบถาม
วิธีแก้ปัญหา: การใช้ช่วงเพื่อกรองวันที่
เพื่อแก้ไขปัญหานี้และกรองบันทึกตามวันที่ได้สำเร็จ เราสามารถใช้เทคนิคที่เกี่ยวข้องกับการตั้งค่าช่วงสำหรับคำสั่งของเรา นี่คือวิธีการทำอย่างมีประสิทธิภาพ:
เทคนิค 1: การกรองโดยใช้ มากกว่า และ น้อยกว่า
DECLARE @p_date DATETIME
SET @p_date = CONVERT(DATETIME, '14 AUG 2008', 106)
SELECT *
FROM table1
WHERE column_datetime >= @p_date
AND column_datetime < DATEADD(d, 1, @p_date)
คำอธิบายของเทคนิค
- ประกาศวันที่: เราจะประกาศตัวแปร
@p_date
และตั้งค่าให้เท่ากับวันที่ที่ต้องการ - การกรองบันทึก: คำสั่งจะเลือกบันทึกที่
column_datetime
มีค่ามากกว่าหรือเท่ากับ@p_date
นั่นหมายความว่ามันจะรวมเวลาใดๆ ในวันนั้น - การละเว้นวันถัดไป: โดยการตรวจสอบว่าค่า
column_datetime
น้อยกว่าวันถัดไป (โดยใช้DATEADD
) เราจึงมั่นใจว่าบันทึกจากวันที่ถัดไป (เช่น15 AUG 2008
) จะถูกละเว้นออกไป
ข้อดีของวิธีนี้
- การใช้ดรรชนี: วิธีนี้ช่วยให้ SQL Server ใช้ดรรชนีที่มีอยู่ใน
column_datetime
ซึ่งสามารถเพิ่มประสิทธิภาพของคำสั่งได้อย่างมาก - การจับคู่วันที่ที่แม่นยำ: มันสามารถจับค่าทั้งหมดสำหรับวันเต็ม
14 AUG 2008
รวมถึงเวลาที่บันทึกไว้จนถึงแต่ไม่รวมถึงเที่ยงคืนของ15 AUG 2008
สรุป
การกรองบันทึกตามวันที่ใน SQL Server สามารถทำได้ง่ายขึ้นด้วยเทคนิคที่ถูกต้อง โดยการใช้การเปรียบเทียบช่วงกับ >=
และ <
คุณสามารถละเว้นส่วนของเวลาใน datetime
และดึงบันทึกที่เกี่ยวข้องทั้งหมดสำหรับวันที่ที่คุณกำหนด วิธีนี้ไม่เพียงแต่ช่วยให้ได้ผลลัพธ์ที่แม่นยำ แต่ยังทำให้แน่ใจว่าคำสั่งของคุณทำงานได้อย่างมีประสิทธิภาพ
เมื่อครั้งหน้าคุณต้องการตรวจสอบวันที่ใน SQL Server โปรดจำเทคนิคที่มีประโยชน์นี้! มันจะไม่เพียงแต่ประหยัดเวลาเท่านั้น แต่ยังช่วยเพิ่มประสิทธิภาพของคำสั่งฐานข้อมูลของคุณอีกด้วย.