Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
Привет всем....;)
Как можно найти результат между двух дней:

SELECT start_time - end_time from tbl;

(start_time = 20.03.2012 15:43:34, end_time = 19.03.2012 15:39:16)

У меня ответ выходит типа так: 1900-01-02 00:04:18.000, а мне нужно чтоб было так: 1 день 00:04:18.000...

Вообще так возможно, как?
2 май 12, 15:26    [12496374]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mr. Abdu Jan
Вообще так возможно, как?

Написать свою функцию
2 май 12, 15:27    [12496398]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ну если datediff не подходит то свое конечно писать
2 май 12, 15:30    [12496429]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
да datediff не помогает.....
мм жесть.. придется писать функцию.. спс..
2 май 12, 15:35    [12496477]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Mr. Abdu Jan
да datediff не помогает.....
мм жесть.. придется писать функцию.. спс..

ну можно посчитать разницу в днях, вычесть из верхней границы, потом разницу в часах - вычесть из верхней границы и тд до секунд и получить искомое.
2 май 12, 15:38    [12496517]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
Мистер Хенки
Mr. Abdu Jan
да datediff не помогает.....
мм жесть.. придется писать функцию.. спс..

ну можно посчитать разницу в днях, вычесть из верхней границы, потом разницу в часах - вычесть из верхней границы и тд до секунд и получить искомое.


если честно как-то не понял...
2 май 12, 15:45    [12496599]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
как то так
declare @d2 datetime

set @d1 = '19820323'
set @d2 = GETDATE()

select
	convert(varchar(32),dys.cnt )+' дней '+convert(varchar(32),hrs.cnt)+':'+CONVERT(varchar(32),mn.cnt)+':'+CONVERT(varchar(32),sc.cnt)
from (
		select 
			d1 = @d1
			,d2 = @d2
		) as t
		cross apply (select cnt = DATEDIFF(DD,t.d1,t.d2)
							,d2 = DATEADD(DD,-DATEDIFF(DD,t.d1,t.d2),t.d2)) dys
		cross apply	(select cnt = DATEDIFF(hh,t.d1,dys.d2)
							,d2 = DATEADD(hh,-DATEDIFF(hh,t.d1,dys.d2),dys.d2)) hrs	
		cross apply	(select cnt = DATEDIFF(MI,t.d1,hrs.d2)
							,d2 = DATEADD(mi,-DATEDIFF(mi,t.d1,hrs.d2),hrs.d2)) mn									
		cross apply	(select cnt = DATEDIFF(s,t.d1,mn.d2)
							,d2 = DATEADD(s,-DATEDIFF(s,t.d1,mn.d2),mn.d2)) sc			
2 май 12, 15:58    [12496725]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Mr. Abdu Jan,

select diff,CAST(diff/86400 as varchar)+' days '+
right('00'+cast((diff%86400)/3600 as varchar),2)+':'+
right('00'+cast((diff%86400)%3600/60 as varchar),2)+':'+
right('00'+cast((diff%86400)%3600%60 as varchar),2) from
(
select DATEDIFF(SS,Start_Time,end_time)as diff
from(
select cast('03/20/2012 15:43:34' as datetime) as Start_Time,
cast(GETDATE() as datetime) as end_time
) a
) b
2 май 12, 16:00    [12496738]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
спасибо всем....
2 май 12, 16:56    [12497181]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
Мистер Хенки
как то так
declare @d2 datetime

set @d1 = '19820323'
set @d2 = GETDATE()

select
	convert(varchar(32),dys.cnt )+' дней '+convert(varchar(32),hrs.cnt)+':'+CONVERT(varchar(32),mn.cnt)+':'+CONVERT(varchar(32),sc.cnt)
from (
		select 
			d1 = @d1
			,d2 = @d2
		) as t
		cross apply (select cnt = DATEDIFF(DD,t.d1,t.d2)
							,d2 = DATEADD(DD,-DATEDIFF(DD,t.d1,t.d2),t.d2)) dys
		cross apply	(select cnt = DATEDIFF(hh,t.d1,dys.d2)
							,d2 = DATEADD(hh,-DATEDIFF(hh,t.d1,dys.d2),dys.d2)) hrs	
		cross apply	(select cnt = DATEDIFF(MI,t.d1,hrs.d2)
							,d2 = DATEADD(mi,-DATEDIFF(mi,t.d1,hrs.d2),hrs.d2)) mn									
		cross apply	(select cnt = DATEDIFF(s,t.d1,mn.d2)
							,d2 = DATEADD(s,-DATEDIFF(s,t.d1,mn.d2),mn.d2)) sc			


а как можно приравнивать полей в переменные @d1 и @d2?
4 май 12, 13:02    [12507341]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Mr. Abdu Jan

а как можно приравнивать полей в переменные @d1 и @d2?

Не понял вопроса, но если что отвечаю: вместо переменных @d1 и @d2 можешь подставлять поля таблицы

select
   поле1
   ,поле2
from таблица
4 май 12, 13:29    [12507634]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
Mr. Abdu Jan
Member

Откуда:
Сообщений: 55
Мистер Хенки,

спасибо я сделал... так :

select 
			alarm_raised_time as d1 
			,cleared_time as d2 from test
4 май 12, 13:46    [12507787]     Ответить | Цитировать Сообщить модератору
 Re: Нахождение результата между двух дней  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
Привет!
В формате datetime такой результат не получишь как не крути, т.к. только 1900-xx-xx

В varchar, используй функцию datepart и т.д. можно так:

DECLARE @d1 datetime;
DECLARE @d2 datetime;
DECLARE @d datetime;

set @d1 = '2012-04-10 12:43:00'
set @d2 = '2015-02-10 11:03:06'

select replace(cast(cast(datepart(year,@d2 - @d1) as int)-1900 as varchar(max)) + ' г.','0 г.','') + ' '
+ replace(cast(datepart(month,@d2 - @d1) as varchar(2)) + ' мес.','0 мес.','') + ' '
+ cast(datepart(day,@d2 - @d1) as varchar(2)) + ' д.'
4 май 12, 17:18    [12509751]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить