مقارنة سلسلة تاريخ مع 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 باستخدام التقنيات الصحيحة. من خلال استخدام مقارنة نطاق مع >=
و <
، يمكنك تجاهل جزء الوقت من التاريخ والوقت واسترجاع جميع السجلات ذات الصلة ليومك المحدد. لا تساعد هذه الطريقة فقط في الحصول على نتائج دقيقة، ولكنها تضمن أيضًا أن تعمل استعلاماتك بكفاءة.
في المرة القادمة التي تحتاج فيها إلى فرز التواريخ في SQL Server، تذكر هذه التقنية المفيدة! لن توفر لك الوقت فحسب، بل ستحسن أيضًا أداء استعلامات قاعدة بياناتك.