Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
mmms
Guest
И вернуть результат в формате Date. (Везде формат даты, без часов, минут, сек. Т.е. есть например 2005.04.13 и 2004.04.13, разница на выходе - формат 0001.00.00) Можно ли так вернуть дату?
Если разница всего 1 день, то вернется 0000.00.01
Если результат отрицательный, то вернуть просто 0000.00.00
13 апр 05, 11:40    [1463793]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
mmms
Guest
PS. Это для вычисления кол-ва проработанных дней на разных работах, используется например в отделах кадрах.
13 апр 05, 11:41    [1463805]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
Glory
Member

Откуда:
Сообщений: 104760
Если разница всего 1 день, то вернется 0000.00.01
А если разница 28 дней то это 28 дней или 1 месяц ?
13 апр 05, 11:43    [1463816]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
Есть DATEDIFF ( datepart , startdate , enddate ) в BOL посмотрите

SELECT DATEDIFF(year, pubdate, getdate()) AS no_of_days
FROM titles

А как возвращать дату в таком формате я не знаю
13 апр 05, 11:50    [1463861]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
ну датой вам вернуть не удасться, тк
BOL
datetime

Date and time data from January 1, 1753 through December 31, 9999

но можно как то так
declare @d1 datetime,@d2 datetime
declare @y int,@m int,@d int
select @d1='20020305',@d2='20050304'
if @d1>=@d2 
 select @y=0,@m=0,@d=0
else
begin
 select @y=datediff(year,@d1,@d2)
 if @y<0 set @y=0
 select @m=datediff(month,dateadd(year,@y,@d1),@d2) 
 if @m<0
  select @y=@y-1,@m=12+@m
 select @d=datediff(day,dateadd(month,@m,dateadd(year,@y,@d1)),@d2)
 if @d<0 
 begin
  select @m=@m-1
  if @m<0
   select @y=@y-1,@m=12+@m
  select @d=datediff(day,dateadd(month,@m,dateadd(year,@y,@d1)),@d2)
 end
end
select right('000'+cast(@y as varchar(4)),4)+'.'+
	   right('0'+cast(@m as varchar(2)),2)+'.'+
       right('0'+cast(@d as varchar(2)),2)
13 апр 05, 11:55    [1463903]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
mmms
Guest
Антон, спасибо, то что надо!
Только вот оформит в виде ф-и не могу, вот так пишу


DROP FUNCTION dat_diff
GO

CREATE FUNCTION dat_diff 
	(@d1 datetime, @d2 datetime)
RETURNS nvarchar(10)
AS
BEGIN

declare 
@y int,
@m int,
@d int

if @d1>=@d2 
 select @y=0,@m=0,@d=0
else
begin
 select @y=datediff(year,@d1,@d2)
 if @y<0 set @y=0
 select @m=datediff(month,dateadd(year,@y,@d1),@d2) 
 if @m<0
  select @y=@y-1,@m=12+@m
 select @d=datediff(day,dateadd(month,@m,dateadd(year,@y,@d1)),@d2)
 if @d<0 
 begin
  select @m=@m-1
  if @m<0
   select @y=@y-1,@m=12+@m
  select @d=datediff(day,dateadd(month,@m,dateadd(year,@y,@d1)),@d2)
 end
end
RETURN (select right('000'+cast(@y as varchar(4)),4)+'.'+
	   right('0'+cast(@m as varchar(2)),2)+'.'+
       right('0'+cast(@d as varchar(2)),2))
END
GO
--тут все ок
SELECT dat_diff '20020305', '20050325'
GO
--а вот тут пишет "Invalid column name 'dat_diff'".
Может что с функцией не так делаю?
13 апр 05, 13:04    [1464262]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
select [dbo].[dat_diff]('20020305', '20050325')
13 апр 05, 13:11    [1464288]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62912
Smirnov Anton
select [dbo].[dat_diff]('20020305', '20050325')
Результат вычитания одной даты из другой не дата, а число.
13 апр 05, 13:35    [1464421]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
Anatoly Podgoretsky
Smirnov Anton
select [dbo].[dat_diff]('20020305', '20050325')
Результат вычитания одной даты из другой не дата, а число.

Число то оно число
но вы посмотрите, чего хочет автор и что предложено в качестве решения
13 апр 05, 13:37    [1464441]     Ответить | Цитировать Сообщить модератору
 Re: Господа, помогите найти ф-ю вычитания одной даты из другой  [new]
mmms
Guest
Антон спасибо, все просто супер!
13 апр 05, 13:56    [1464542]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить