ASP.NET وفرق خادم SQL Server في الأيام والساعات والدقائق

StackOverflow https://stackoverflow.com/questions/1873519

سؤال

أنا أعمل على تطبيق تتبع القضايا مع ASP.NET و SQL Server 2005. أثناء تتبع المشكلات التي أقوم بتخزينها الموعد النهائي كدولة في قاعدة البيانات وأيضا إذا وظائف شخص ما رسالة في لوحة الرسائل، فإن تاريخ النشر / الوقت هو أيضا الحصول عليه أيضا تخزينها في DB كما DateTime.

الآن متطلباتي هو إظهار الموعد النهائي للمشكلة بأنه "يومين متبقين" عندما يتم ترك يومين فقط، مثل هذا عندما يكون الموعد النهائي قد انتهى بالفعل سود عرض 2 يوما وراء الجدول الزمني. هذا ما أعتقد أنه يمكن تحقيقه مع SQL Server Datediff ()، ولكن في حالة الرسائل التي أحتاج إلى إظهار مثل السندات منذ ساعتين تقريبا 3 دقائق .... أو أرسلت بواسطة 3 أيام قبل 18 ساعة أو شيء مماثل ... ( يمكننا القضاء على الساعات إذا تم نشرها حتى قبل يوم واحد).

حاول جوجل ولكن لا يمكن العثور على أي شيء مفيد. سيكون؛ نقدر مساعدة الكريمة كما هو الحال دائما.

شكرا مقدما.

هل كانت مفيدة؟

المحلول

استخدم اختلافا في الاستعلام التالي، وضبط حسب الحاجة. لاستبدال RDBMS غيرها من وظائف التاريخ مع المعادلات المناسبة.

SELECT  CASE
          WHEN DateValue-GETDATE() >= 1 THEN CAST(DATEPART(dy, DateValue-GETDATE()) AS varchar) + ' day(s) remaining'
          WHEN DateValue-GETDATE() >= 0 THEN CAST(DATEPART(hh, DateValue-GETDATE()) AS varchar) + ' hour(s) remaining'
          /*Note, it's convenient to switch around for negatives*/
          WHEN GETDATE()-DateValue <= '00:59' THEN CAST(DATEPART(mi, GETDATE()-DateValue) AS varchar) + ' minutes(s) overdue'
          WHEN GETDATE()-DateValue <= 1 THEN CAST(DATEPART(hh, GETDATE()-DateValue) AS varchar) + ' hours(s) overdue'
        ELSE
          CONVERT(varchar, DateValue-GETDATE(), 121)
        END AS Time_Scale

نصائح أخرى

بدلا من القيام بذلك في SQL، يمكنك استخدام .NET الفترة الزمنية بنية للحصول على هذه الوظيفة.

يمكنك الحصول عليها طرح تاريخ واحد من آخر، وهذا يمنحك الساعات / الدقائق / ثانية التفاصيل التي تحتاج إليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top