البرمجة

كيفية فحص الوقت المتبقي في SQL

تبدو الاستعلام الخاص بك صحيحًا، ولكن الخطأ الذي تواجهه يحدث لأن الاستعلام الفرعي الذي تستخدمه يعيد أكثر من قيمة واحدة. يجب أن يُعيد الاستعلام الفرعي قيمة واحدة فقط ليتمكن الاستعلام الرئيسي من مقارنتها بقيمة 0.

يمكنك حل هذه المشكلة بتعديل الاستعلام الفرعي ليعيد قيمة واحدة. هناك العديد من الطرق لتحقيق ذلك، واحدة منها هي استخدام TOP 1 للحصول على السجل الأول فقط. هذا مثال على كيفية تعديل الاستعلام:

sql
SELECT * FROM voorwerp WHERE ( SELECT TOP 1 (((CAST(((DATEADD(dd, looptijd, datum)) - GETDATE()) AS FLOAT) * 24.0) * 60.0) * 60.0) AS tijd FROM voorwerp ) <= 0

يجب أن يقوم هذا الاستعلام بإعادة السجل الوحيد الذي ينتجه الاستعلام الفرعي والذي تكون قيمة tijd الخاصة به أقل من أو تساوي 0.

المزيد من المعلومات

يمكننا تحسين الاستعلام بحيث لا يتطلب استخدام استعلام فرعي، بدلاً من ذلك يمكننا استخدام التعبير المباشر في الشرط WHERE. هناك أيضًا بعض التحسينات الأخرى التي يمكن القيام بها لجعل الاستعلام أكثر فعالية. إليك كيف يمكن تعديل الاستعلام لتحقيق ذلك:

sql
SELECT * FROM voorwerp WHERE DATEDIFF(SECOND, GETDATE(), DATEADD(DAY, looptijd, datum)) <= 0

في هذا الاستعلام، استخدمنا DATEDIFF لحساب الفارق بين تاريخ اليوم الحالي GETDATE() وتاريخ انتهاء الوقت DATEADD(DAY, looptijd, datum) بالثواني. إذا كان الفارق أقل من أو يساوي صفر، فهذا يعني أن الوقت انتهى أو أنه أقل من الوقت الحالي.

زر الذهاب إلى الأعلى