create or replace function datediff(p_what in varchar2,
p_d1 in date,
p_d2 in date) return number
as
l_result number;
begin
select (p_d2-p_d1) *
decode(upper(p_what),
'DAY', 1, 'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL)
into l_result from dual;
return l_result;
end;
/
Это то, что я делаю в Oracle (Предоставлено: ASKTOM). Я получаю разницу между днями, часами, минутами или секундами.
В MS SQL, либо
PRINT DATEDIFF(DAY, '1/1/2011', '3/1/2011')
Это дает число раз граница полночь скрещенных между двумя датами. Вы можете решить добавить один к этому, если вы включаете обе даты в счетчик - или вычитаете один, если вы не хотите включать ни одну дату.
ИЛИ
DECLARE @startdate datetime2 = '2007-05-05 12:10:09.3312722';
DECLARE @enddate datetime2 = '2009-05-04 12:10:09.3312722';
SELECT DATEDIFF(day, @startdate, @enddate);
С помощью этого вы можете манипулировать.
Что вы пробовали до сих пор, почему это не работает? У вас есть алгоритм для вычисления дней данных? –
используйте 'datepart', чтобы получить' 2', а затем сделайте что-то вроде [this SO post] (http://stackoverflow.com/questions/691022/how-to-determine-the-number-of-days-in- a-month-in-sql-server), чтобы получить дни в месяце –