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

Откуда:
Сообщений: 11
Добрый день.

Есть два datetime. Из одного нужно взять только дату из второго только время, сложить их и положить всё в третий. Как это можно сделать?

Что то типа этого:

declare @date datetime
set @date=CONVERT(varchar(8), GETDATE(), 112)

declare @time datetime
set @time=CONVERT(varchar(8), GETDATE(), 108)

declare @res
set @res = @date+@time
28 фев 12, 13:49    [12163508]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
SELECT {fn CURRENT_DATE()} + 'T' + {fn CURRENT_TIME()}
28 фев 12, 13:54    [12163553]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
select
 cast(cast(getdate() as date) as datetime) + cast(getdate() as time)
28 фев 12, 13:56    [12163570]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
cdmax2002,

или так
set @res = dateadd(ss,datediff(ss,'19000101',@time),@date)
select @res
28 фев 12, 13:56    [12163571]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
iljy
Member

Откуда:
Сообщений: 8711
cdmax2002,

declare @date datetime
set @date='20120125 3:4:5'

declare @time datetime
set @time='20010101 6:7:8'

select DATEADD(ms, datediff(ms, datediff(d,0,@time),@time), datediff(d,0,@date))
select dateadd(ms, datediff(ms, 0, CAST(@time as time)), cast(CAST(@date as date) as datetime))
28 фев 12, 13:58    [12163590]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
cdmax2002
Member

Откуда:
Сообщений: 11
Большое спасибо, но ни один вариант не работает.

Забыл написать. Используется SQL 2005.

Всё еще актуально.
28 фев 12, 14:22    [12163767]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
СС123
Guest
cdmax2002
ни один вариант не работает.

Все варианты работают, чему тут не работать-то? Давайте начнем с самого начала - что значит "не работают" в вашем понимании? Какое сообщение об ошибке?
28 фев 12, 14:39    [12163907]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
Гузы
Guest
cdmax2002,
2005:
select 
getdate(),
convert(datetime,convert(char,getdate(),104),104),
datediff(ms,convert(datetime,convert(char,getdate(),104),104), getdate()),
dateadd(ms,datediff(ms,convert(datetime,convert(char,getdate(),104),104), getdate()) ,
convert(datetime,convert(char,getdate(),104),104))

Вот такой огород.
28 фев 12, 14:42    [12163924]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
declare @date datetime
set @date=CONVERT(varchar(8), GETDATE(), 112)

declare @time datetime
set @time=CONVERT(varchar(8), GETDATE(), 108)

declare @res datetime
set @res = DATEADD(DAY,DATEDIFF(DAY,@time,@date),@time);

SELECT CONVERT(CHAR(23),@date,126);
SELECT CONVERT(CHAR(23),@time,126);
SELECT CONVERT(CHAR(23),@res,126);
28 фев 12, 15:44    [12164467]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
cdmax2002
Member

Откуда:
Сообщений: 11
автор
Все варианты работают, чему тут не работать-то? Давайте начнем с самого начала - что значит "не работают" в вашем понимании? Какое сообщение об ошибке?


Давайте. :)

SELECT {fn CURRENT_DATE()} + 'T' + {fn CURRENT_TIME()}

Так работает, но только непосредственно с CURRENT_DATE и CURRENT_TIME. Не совсем понятно куда переменные подставить @date и @time.


declare @date datetime
set @date=CONVERT(varchar(8), GETDATE(), 112)

declare @time datetime
set @time=CONVERT(varchar(8), GETDATE(), 108)

select
 cast(cast(getdate() as date) as datetime) + cast(getdate() as time)


Ошибка:
Msg 243, Level 16, State 1, Line 7
Type date is not a defined system type.
Msg 243, Level 16, State 1, Line 7
Type time is not a defined system type.


declare @date datetime
set @date=CONVERT(varchar(8), GETDATE(), 112)

declare @time datetime
set @time=CONVERT(varchar(8), GETDATE(), 108)

declare @res datetime
set @res = dateadd(ss,datediff(ss,'19000101',@time),@date)
select @res

Опять же работает только с GETDATE().

Допустим, если сделать так:
declare @date datetime
set @date=CONVERT(varchar(8), '20120228 15:10:47', 112)

declare @time datetime
set @time=CONVERT(varchar(8), '19000101 13:43:42', 108)

declare @res datetime
set @res = dateadd(ss,datediff(ss,'19000101',@time),@date)
select @res


То результат выполнения следующий:
2012-02-28 00:00:00.000

Далее.
declare @date datetime
set @date='20120125 3:4:5'

declare @time datetime
set @time='20010101 6:7:8'

select DATEADD(ms, datediff(ms, datediff(d,0,@time),@time), datediff(d,0,@date))
select dateadd(ms, datediff(ms, 0, CAST(@time as time)), cast(CAST(@date as date) as datetime))


Результат тоже:
Msg 243, Level 16, State 1, Line 8
Type time is not a defined system type.
Msg 243, Level 16, State 1, Line 8
Type date is not a defined system type.

Что то страшное...
select 
getdate(),
convert(datetime,convert(char,getdate(),104),104),
datediff(ms,convert(datetime,convert(char,getdate(),104),104), getdate()),
dateadd(ms,datediff(ms,convert(datetime,convert(char,getdate(),104),104), getdate()) ,
convert(datetime,convert(char,getdate(),104),104))


В общем, остановился почти на первоначальном варианте:

declare @date datetime
set @date = GETDATE() --'20120228 15:10:47'

declare @time datetime
SET @time = '20010402 22:02:23'

select @date
select @time

select @time=convert(varchar(8),@time,114)
select @date=convert(varchar(8),@date,112)

select @date = @date +@time

select @date


результат:

2012-02-28 15:44:26.700
2001-04-02 22:02:23.000
2012-02-28 22:02:23.000

всем спасибо. :)
28 фев 12, 15:52    [12164557]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
Glory
Member

Откуда:
Сообщений: 104751
cdmax2002
Опять же работает только с GETDATE().

Допустим, если сделать так:
declare @date datetime
set @date=CONVERT(varchar(8), '20120228 15:10:47', 112)

declare @time datetime
set @time=CONVERT(varchar(8), '19000101 13:43:42', 108)

declare @res datetime
set @res = dateadd(ss,datediff(ss,'19000101',@time),@date)
select @res

Интересно, а как в varchar(8) поместится дата+время то ?
28 фев 12, 15:54    [12164588]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
iljy
Member

Откуда:
Сообщений: 8711
cdmax2002
Далее.
declare @date datetime
set @date='20120125 3:4:5'

declare @time datetime
set @time='20010101 6:7:8'

select DATEADD(ms, datediff(ms, datediff(d,0,@time),@time), datediff(d,0,@date))
select dateadd(ms, datediff(ms, 0, CAST(@time as time)), cast(CAST(@date as date) as datetime))


А вы запросы читать не пробовали? Я вам 2 (ДВА) запроса написал, один универсальный, второй - только для 2008 и выше (в нем появились типы date и time). Что, посимвольно надо разжевывать?
28 фев 12, 15:56    [12164614]     Ответить | Цитировать Сообщить модератору
 Re: Сложить дату и время.  [new]
cdmax2002
Member

Откуда:
Сообщений: 11
Согласен.

Так тоже работает:
declare @date datetime
set @date=CONVERT(varchar(8), '20120228 15:10:47', 112)

declare @time datetime
set @time=CONVERT(varchar(16), '19000101 13:43:42', 108)

declare @res datetime
set @res = dateadd(ss,datediff(ss,'19000101',@time),@date)
select @res


Результат:
2012-02-28 13:43:04.000

автор
А вы запросы читать не пробовали? Я вам 2 (ДВА) запроса написал, один универсальный, второй - только для 2008 и выше (в нем появились типы date и time). Что, посимвольно надо разжевывать?

Прошу прощения, сразу не обратил внимание. Конец рабочего дня уже, знаете ли. :)

Действительно. Всем большое спасибо.

Буду использовать это:
declare @date datetime
set @date='20120125 3:4:5'

declare @time datetime
set @time='20010101 6:7:8'

select DATEADD(ms, datediff(ms, datediff(d,0,@time),@time), datediff(d,0,@date))


Наверное тему можно закрыть.

Еще раз, спасибо.
28 фев 12, 16:03    [12164685]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить