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

Откуда:
Сообщений: 27
Здравствуйте, для курсовой работы, мне необходимо задать ограничение на дату, которое затрагивает только часы. Школа работает с 8.00 до 14.00, как сделать такое ограничение ?
19 май 14, 11:15    [16035307]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Tap0chek,

datepart
19 май 14, 11:31    [16035396]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
time(0)
Guest
select cast(GETDATE() as time(0))
19 май 14, 11:58    [16035582]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Посмотри, что возвращает запрос:
select getdate(),  cast(datediff(day, 0, getdate())+8.0/24 as datetime), cast(datediff(day, 0, getdate())+14.0/24 as datetime)
19 май 14, 12:17    [16035724]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Вот правильный запрос:
select getdate(),  dateadd(hour, 8, datediff(day, 0, getdate())), dateadd(hour, 14, datediff(day, 0, getdate()))
19 май 14, 12:22    [16035760]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Tap0chek
Member

Откуда:
Сообщений: 27
TempFox,
Я понял, как работает то, что вы написали, но это ведь не ограничение.
Скажите будет ли работать такой вариант:
Constraint some_constr CHECK (cast (datepart (DataColum, hour)) between 8 and 14),
19 май 14, 12:43    [16035928]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Ну, если сейчас выполнить такой запрос:
begin
  create table #t1(d1 datetime CHECK(datepart(hour, d1) between 8 and 14))
  insert into #t1 values (getdate())
  select * from #t1
  drop table #t1
end
всё работает.

А если вот так:
begin
  create table #t1(d1 datetime CHECK(datepart(hour, d1) between 8 and 14))
  insert into #t1 values (getdate() + 0.5)
  select * from #t1
  drop table #t1
end
вылетает с ошибкой:

Msg 547, Level 16, State 0, Line 3
Конфликт инструкции INSERT с ограничением CHECK "CK__#t1___________d1__2B2D7F13". Конфликт произошел в базе данных "tempdb", таблица "dbo.#t1_________________________________________________________________________________________________________________000000005585", column 'd1'.
Выполнение данной инструкции было прервано.

(0 row(s) affected)


Как Вы думаете, работает ограничение или нет?
19 май 14, 13:25    [16036233]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Только это ограничение неправильное, так как не отсеет время 14:59:59
19 май 14, 13:27    [16036259]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
А что по-Вашему означает эта ошибка?
19 май 14, 13:29    [16036272]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Tap0chek
Member

Откуда:
Сообщений: 27
TempFox,
Я не понял, почему выскочила эта ошибка. getdate должен был нам выдать 13 часов сколько то то минут. Прибавляя к нему 0.5 часа мы не получим 14 часов.
19 май 14, 13:44    [16036393]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Мы добавляем полсуток, а не полчаса, дата учитывается в днях
19 май 14, 13:47    [16036423]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Tap0chek
TempFox,
Я не понял, почему выскочила эта ошибка. getdate должен был нам выдать 13 часов сколько то то минут. Прибавляя к нему 0.5 часа мы не получим 14 часов.
Где это прибавляется 0.5 часа???
Кто это сказал?
19 май 14, 13:48    [16036426]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Tap0chek
Member

Откуда:
Сообщений: 27
iap,
Я так решил основываясь на том, что мне присылали до этого. Но теперь я понял что в 14.0\24 знак деления не способ указать на формат даты, а просто деление.
TempFox,
То, что ограничение допускает 14.59.59 не страшно, так как каждый урок длится 1 час. В итоге получилась такая таблица, но он почему-то ругается на последнею скобку:
CREATE TABLE [dbo].[Raspisanie] (
    [Data]             SMALLDATETIME NOT NULL,
    [Class_id]         CHAR (3)      NOT NULL,
    [timelane_subject] CHAR (10)     NOT NULL,
    [timelane_prepod]  CHAR (40)     NOT NULL,
	
	
	CONSTRAINT [PK_Raspisanie] PRIMARY KEY CLUSTERED ( [Data] asc, [Class_id] ASC, [timelane_prepod] ASC, [timelane_subject] ASC),
	smalldatetime Data CHECK (datepart (hour, Data) between 8 and 14))

	);
19 май 14, 14:33    [16036832]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Для временной таблицы вот так не ругается:
begin
  CREATE TABLE #Raspisanie (
    d1             SMALLDATETIME NOT NULL,
    Class_id         CHAR (3)      NOT NULL,
    timelane_subject CHAR (10)     NOT NULL,
    timelane_prepod  CHAR (40)     NOT NULL
	
	
	CONSTRAINT PK_Raspisanie PRIMARY KEY CLUSTERED ( d1 asc, Class_id ASC, timelane_prepod ASC, timelane_subject ASC),
	CONSTRAINT d1ch CHECK (datepart (hour, d1) between 8 and 14))


  drop table #Raspisanie
end
И замените CHAR на varchar, SMALLDATETIME на datetime
19 май 14, 15:22    [16037268]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Tap0chek
Member

Откуда:
Сообщений: 27
TempFox,
Таблица у меня не временная, может в этом дело ? Так как он продолжает ругаться.
19 май 14, 15:41    [16037441]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
TempFox
Guest
Тогда подсчитайте вручную количество открывающих и закрывающих скобок - может быть он прав?
19 май 14, 15:44    [16037470]     Ответить | Цитировать Сообщить модератору
 Re: Задача ограничения, на временной интервал.  [new]
Tap0chek
Member

Откуда:
Сообщений: 27
TempFox,
Нашел, спасибо за помощь =)
19 май 14, 16:11    [16037733]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить