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

Откуда: Рудный Алтай
Сообщений: 89
Добрый день.
Прошу подсказать.
Есть (в процессе разработки) БД, в режиме совместимости MS SQL 2005 (90).
Работа ведется с двух компьютеров, на стационарном развернут MS SQL Express 2008 R2, на ноутбуке MS SQL Express 2005.
Вопрос в следующем. В базе происходит регистрация событий (smalldatetime) в таблице, есть вторая таблица с переменными значениями времени, и в запросе информация обрабатывается и выводится результат.
К примеру, событие 1 зарегистрировано 20.02.2013 08:01:00. Событие 2 зарегистрировано 20.02.2013 16:58:00.
В таблице, которая содержит переменные значения, мне нужно установить записи, содержащие время, без даты: переменная_1 08:00:00 и переменная_2 17:00:00.
Все было бы хорошо, но в 2005 SQL я не нашел тип переменной: time. Как я понял, он присутствует только в 2008 и новее. Остается использовать smalldatetime для обеспечения совместимости?
Запрос мне видится примерно таким (упрощенно): событие 1.время - переменная_1.время + переменная 2 - событие 2.время, для того чтобы подсчитать отклонение регистрации события от нормы для каждого дня.
21 фев 13, 12:37    [13960140]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Antony GL
отклонение регистрации события от нормы для каждого дня.
это интервал что ли?
21 фев 13, 12:40    [13960173]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Antony GL
на ноутбуке MS SQL Express 2005.
в 2005 SQL я не нашел тип переменной: time

Ну установите на ноутбук MS SQL Express 2008 R2 и используйте тип данных time.

Antony GL
Запрос мне видится примерно таким (упрощенно): событие 1.время - переменная_1.время + переменная 2 - событие 2.время, для того чтобы подсчитать отклонение регистрации события от нормы для каждого дня.

Ничего не понял. Можно это же самое выразить в T-SQL?
21 фев 13, 12:44    [13960228]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Antony GL
Member

Откуда: Рудный Алтай
Сообщений: 89
Паганель
Antony GL
отклонение регистрации события от нормы для каждого дня.
это интервал что ли?

Не совсем. В прикладном интересе будет интересно лишь абсолютная цифра (модуль) обоих отклонений за каждый день.
В приведенном примере отклонение составит 3 минуты за 20.02.2012
21 фев 13, 12:45    [13960234]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Antony GL
В приведенном примере отклонение составит 3 минуты за 20.02.2012
может, просто хранить целое число 3 ?
21 фев 13, 12:48    [13960266]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Antony GL
Member

Откуда: Рудный Алтай
Сообщений: 89
Гость333
Antony GL
на ноутбуке MS SQL Express 2005.
в 2005 SQL я не нашел тип переменной: time

Ну установите на ноутбук MS SQL Express 2008 R2 и используйте тип данных time.

Antony GL
Запрос мне видится примерно таким (упрощенно): событие 1.время - переменная_1.время + переменная 2 - событие 2.время, для того чтобы подсчитать отклонение регистрации события от нормы для каждого дня.

Ничего не понял. Можно это же самое выразить в T-SQL?


Для этого нужен XP SP3 минимум, а установленная система XP SP2 на ноутбуке.

Накидал t-sql.

declare @event1 smalldatetime
declare @event2 smalldatetime
declare @start smalldatetime
declare @finish smalldatetime

set @event1 = '20100220 08:01:00'
set @event2 = '20100220 16:58:00'
set @start = '08:00:00'
set @finish = '17:00:00'

--set @start = datepart(hh, '08:00:00')
select start - возвращает какую-то фигню, а не часы :(

select datediff (hh, @event2, @event1) - работает и показывает разницу
21 фев 13, 14:14    [13961047]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Antony GL
Member

Откуда: Рудный Алтай
Сообщений: 89
Antony GL
select start - возвращает какую-то фигню, а не часы :(



select @start конечно же.

Проблема в том, что мне нужно знать разницу между определенным временем (контрольным) и временем когда событие случилось, для каждого дня (записи).
21 фев 13, 14:16    [13961072]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
declare @table1 table (id int identity, shtamp datetime)
insert @table1 values ('20130220 08:01'), ('20130220 16:58'), ('20130220 14:30'), ('20130220 14:31')
declare @timing table (times datetime)
insert @timing values('19000101 08:00'), ('19000101 12:00'), ('19000101 17:00'), ('19000101 21:00')

select *, DATEPART(HOUR, t.shtamp)*60+DATEPART(MINUTE, t.shtamp) - DATEPART(HOUR, a.times)*60-DATEPART(MINUTE, a.times) deviation
from @table1 t
cross apply(
   select top(1) g.*
   from @timing g
   order by ABS(DATEPART(HOUR, t.shtamp)*60+DATEPART(MINUTE, t.shtamp) - DATEPART(HOUR, g.times)*60-DATEPART(MINUTE, g.times))
   )a
21 фев 13, 14:38    [13961261]     Ответить | Цитировать Сообщить модератору
 Re: Тип данных Time в SQL 2005?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Даже, я бы сказал, так:
declare @table1 table (id int identity, shtamp datetime)
insert @table1 values ('20130220 08:01'), ('20130220 16:58'), ('20130220 14:30'), ('20130220 14:31')

if OBJECT_ID('timing') is null begin
   create table timing (times datetime, eval as DATEPART(HOUR, times)*60-DATEPART(MINUTE, times) PERSISTED CONSTRAINT PK_timing PRIMARY KEY)
   insert timing values('19000101 08:00'), ('19000101 12:00'), ('19000101 17:00'), ('19000101 21:00')
end

select *
from @table1 t
cross apply (
   select min(ABS(a.dev))deviation
   from timing g
   cross apply (select DATEPART(HOUR, t.shtamp)*60+DATEPART(MINUTE, t.shtamp)-g.eval dev) a
   ) c

-- drop table timing
21 фев 13, 16:25    [13962131]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить