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

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

нуждаюсь в помощи

Стоит SQL server 2008 r2, в ней таблица и в этой таблице есть поле date.
нужно сделать новое поле (date2) и в ней так называемую 2-х часовку, а точнее чтобы
все что, начиная с 00:00 по 02:00, закидывалась как 00:00
начиная с 02:00 по 04:00, закидывалась как 02:00
начиная с 04:00 по 06:00, закидывалась как 04:00
начиная с 06:00 по 08:00, закидывалась как 06:00

т.е. имеем такую таблицу:
date
2011-08-01 00:00:00.000
2011-08-01 00:56:00.000
2011-08-01 01:09:00.000
2011-08-01 01:47:00.000
2011-08-01 02:37:00.000
2011-08-01 02:57:00.000
2011-08-01 03:34:00.000
2011-08-01 04:02:00.000
2011-08-01 04:36:00.000
2011-08-01 05:02:00.000
2011-08-01 05:37:00.000
2011-08-01 06:58:00.000

надо получить такую:

datedate2
2011-08-01 00:00:00.0002011-08-01 00:00:00.000
2011-08-01 00:56:00.0002011-08-01 00:00:00.000
2011-08-01 01:09:00.0002011-08-01 00:00:00.000
2011-08-01 01:47:00.0002011-08-01 00:00:00.000
2011-08-01 02:37:00.0002011-08-01 02:00:00.000
2011-08-01 02:57:00.0002011-08-01 02:00:00.000
2011-08-01 03:34:00.0002011-08-01 02:00:00.000
2011-08-01 04:02:00.0002011-08-01 04:00:00.000
2011-08-01 04:36:00.0002011-08-01 04:00:00.000
2011-08-01 05:02:00.0002011-08-01 04:00:00.000
2011-08-01 05:37:00.0002011-08-01 04:00:00.000
2011-08-01 06:58:00.0002011-08-01 06:00:00.000
2 сен 11, 12:52    [11217603]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
ahmae,
CASE вам в помощь!
2 сен 11, 12:56    [11217651]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
зигмунд
Guest
s.w.a.n.,

1+1 тоже через case делаете?
2 сен 11, 13:00    [11217697]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
aleks2
Guest
declare @d datetime

set @d='20110801 01:59:00.000'

select DATEADD(hour, (DATEPART(hour, @d)/2)*2, DATEDIFF(day, 0, @d))
2 сен 11, 13:06    [11217758]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
зигмунд
s.w.a.n.,
1+1 тоже через case делаете?

))) согласен, я не прав.

(hh/2)*2
2 сен 11, 13:10    [11217789]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
komrad
Member

Откуда:
Сообщений: 5752
ну и суммирую предыдущих докладчиков финальным скриптом :

create table test1 (dt datetime)
go
insert into test1 (dt) values ('2011-08-01 00:00:00.000')
insert into test1 (dt) values ('2011-08-01 00:56:00.000') 
insert into test1 (dt) values ('2011-08-01 01:09:00.000')
insert into test1 (dt) values ('2011-08-01 01:47:00.000') 
insert into test1 (dt) values ('2011-08-01 02:37:00.000') 
insert into test1 (dt) values ('2011-08-01 02:57:00.000') 
insert into test1 (dt) values ('2011-08-01 03:34:00.000') 
insert into test1 (dt) values ('2011-08-01 04:02:00.000') 
insert into test1 (dt) values ('2011-08-01 04:36:00.000') 
insert into test1 (dt) values ('2011-08-01 05:02:00.000') 
insert into test1 (dt) values ('2011-08-01 05:37:00.000') 
insert into test1 (dt) values ('2011-08-01 06:58:00.000') 
go
alter table test1 
add dt2 as (DATEADD(hour, (DATEPART(hour, dt)/2)*2, DATEDIFF(day, 0, dt)))
go
select * from test1 
go
2 сен 11, 13:19    [11217860]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
ahmae
Member

Откуда:
Сообщений: 35
спасиб всем!! работает!!!
2 сен 11, 13:29    [11217971]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
ahmae
Member

Откуда:
Сообщений: 35
был еще один вопрос:
как создать еще одно поле, которое подсчитывает количество дней в месяце в зависимости от поля время.
т.е. типо такого
vremakol_vo_dnei
2011-08-01 00:56:00.00031
2011-09-01 00:56:00.00030
2011-10-01 00:56:00.00031
2 сен 11, 18:39    [11220542]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=115
3 сен 11, 06:34    [11222226]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
ahmae
Member

Откуда:
Сообщений: 35
спасиб
3 сен 11, 11:06    [11222320]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
ahmae
Member

Откуда:
Сообщений: 35
Ребята, а как сделать обрезку от минут и секунд, а дата и часы были
т.е. 2011-09-18 23:10:33.000
надо получить 2011-09-18 23:00:00.000
19 сен 11, 11:10    [11296696]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SET NOCOUNT ON;
DECLARE @D DATETIME=GETDATE();
SELECT DATEADD(HOUR,DATEDIFF(HOUR,0,@D),0);
19 сен 11, 11:19    [11296763]     Ответить | Цитировать Сообщить модератору
 Re: операция с датами  [new]
ahmae
Member

Откуда:
Сообщений: 35
Благодарю
19 сен 11, 11:20    [11296773]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить