2017-02-01 4 views
0

Я запускаю датифф, чтобы возвращать микросекунду между двумя временными метками, поэтому я считаю, что наибольший разрыв, который можно обрабатывать, составляет около 33 минут.SQL Datediff overflow - Null overflows

Там являются будет целый ряд причин, почему бы появиться 33+ минут разрыв, и это не беспокойства для меня. Они выходят за рамки моего анализа. Я ожидал, что некоторые функциональные возможности игнорировать переполнение в результате, и я наткнулся на:

set arithabort off 
set ansi_warnings off 
set arithignore on 

Я понимаю, что они должны подавить предупреждения и предотвращения абортов запроса, возвращая NULL, где переполнение будет происходить.

Однако, на самом деле, используя их в запросе по-прежнему приводит в:

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart. 

Я немного запутался. Является ли перерасход датиста не арифметическим переполнением? Есть ли другой «набор» намека на то, что я должен использовать?

ответ

1

Я не уверен, о переполнении, но вы можете использовать case:

select (case when datediff(second, t1, t2) > 30 
      then cast(datediff(second, t1, t2) as bigint) * 1000000 
      else cast(datediff(microsecond, t1, t2) as bigint) 
     end)