การเปรียบเทียบสตริงวันที่กับ 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)

คำอธิบายของเทคนิค

  1. ประกาศวันที่: เราจะประกาศตัวแปร @p_date และตั้งค่าให้เท่ากับวันที่ที่ต้องการ
  2. การกรองบันทึก: คำสั่งจะเลือกบันทึกที่ column_datetime มีค่ามากกว่าหรือเท่ากับ @p_date นั่นหมายความว่ามันจะรวมเวลาใดๆ ในวันนั้น
  3. การละเว้นวันถัดไป: โดยการตรวจสอบว่าค่า column_datetime น้อยกว่าวันถัดไป (โดยใช้ DATEADD) เราจึงมั่นใจว่าบันทึกจากวันที่ถัดไป (เช่น 15 AUG 2008) จะถูกละเว้นออกไป

ข้อดีของวิธีนี้

  • การใช้ดรรชนี: วิธีนี้ช่วยให้ SQL Server ใช้ดรรชนีที่มีอยู่ใน column_datetime ซึ่งสามารถเพิ่มประสิทธิภาพของคำสั่งได้อย่างมาก
  • การจับคู่วันที่ที่แม่นยำ: มันสามารถจับค่าทั้งหมดสำหรับวันเต็ม 14 AUG 2008 รวมถึงเวลาที่บันทึกไว้จนถึงแต่ไม่รวมถึงเที่ยงคืนของ 15 AUG 2008

สรุป

การกรองบันทึกตามวันที่ใน SQL Server สามารถทำได้ง่ายขึ้นด้วยเทคนิคที่ถูกต้อง โดยการใช้การเปรียบเทียบช่วงกับ >= และ < คุณสามารถละเว้นส่วนของเวลาใน datetime และดึงบันทึกที่เกี่ยวข้องทั้งหมดสำหรับวันที่ที่คุณกำหนด วิธีนี้ไม่เพียงแต่ช่วยให้ได้ผลลัพธ์ที่แม่นยำ แต่ยังทำให้แน่ใจว่าคำสั่งของคุณทำงานได้อย่างมีประสิทธิภาพ

เมื่อครั้งหน้าคุณต้องการตรวจสอบวันที่ใน SQL Server โปรดจำเทคนิคที่มีประโยชน์นี้! มันจะไม่เพียงแต่ประหยัดเวลาเท่านั้น แต่ยังช่วยเพิ่มประสิทธิภาพของคำสั่งฐานข้อมูลของคุณอีกด้วย.