لماذا لا يتم هذا INSERT مع بيان DATEDIFF يعمل الصحيح؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL

وIntervalID هو عدد صحيح، مدة هو تعويم

واني اسعى الى وضع كل فترات ساعة في العمود المدة ... أفترض أنه حتى لو كان أقل من ساعة فإنه سيتم استخدام جزء وهذا هو السبب وضعت تعويم؟

ومساعدة.

وPS: انها تعمل غرامة عدم وجود أخطاء، ولكن بعد انها فعلت الجدول فترات لا تزال فارغة ... وأنا أعلم أن البيانات في الجدول TimeInterval على الرغم من ...

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

المحلول

وأنا لست متأكدا من السبب في البيانات الخاصة بك لا يظهر، ولكن DATEDIFF لن يعود تعويم. للحصول على تعويم، عليك ربما تريد استخدام أصغر وحدة زمنية والقسمة على عدد من الوحدات الخاصة بك في الدقيقة الواحدة. مثال:

DATEDIFF(second, dtStart, dtEnd) / (3600.0)

نصائح أخرى

وDATEDIFF بإرجاع كثافة العمليات من عدد الحدود تاريخ جزءا تجاوزها. أتوقع لك للحصول على أرضية عدد من مدة ساعة، ما لم يكن هناك مشكلة مع التحويل الضمني من كثافة العمليات لتعويم.

ومن المفيد أيضا لنشر رسالة الخطأ الواردة.

لإدراج كسور الفعلية للساعة، الاستخدام:

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT 
  ixInterval, 
  DATEDIFF(mi, dtStart, dtEnd) / 60.0
FROM 
  fogbugz.dbo.TimeInterval
WHERE 
  dtEnd is not NULL

وDATEDIFF دوما بإرجاع لك قيمة INT، أبدا الكسر.

وحاول تشغيل SELECT من تلقاء نفسها مع بت INSERT، للتأكد من أن الاستعلام الخاص بك هو في الواقع تعود بعض البيانات.

وتحرير: وكما قال آخرون، DATEDIFF بإرجاع عدد صحيح، وليس تعويم، ولكن هذا لا ينبغي أن يمنع INSERT من إدخال بعض البيانات

أولا ما هي النتائج لا تحصل فقط من تشغيل حدد؟

وفي SQL Server DateDiff بإرجاع عدد صحيح ( انظر MSDN )

وDATEDIFF سيعود عدد صحيح لا تعويم - غير أن المشكلة التي تواجه

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