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

Откуда:
Сообщений: 37
Не могу понять почему не работает. Выдает: не удается преобразовать значение параметра Decimal в DateTime
SELECT  ID FROM Raspisanie WHERE (Date>DATEADD(Day, -@Period, GetDate()))
, где Date - название колонки с данными в формате smalldatetime.

если написать такой запрос:
Declare @Period int = 365;
	DECLARE @rDate smalldatetime;
	SET @rDate = (SELECT rDate FROM Raspisanie WHERE ID = 65)
	SELECT  ID FROM Raspisanie WHERE (@rDate<DATEADD(Day, -@Period, GetDate()))
то он отрабатывается нормально
В чем проблема может кто-то подскажет.
25 дек 09, 12:46    [8118211]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
-=DiM@n=-
Member

Откуда: Москва
Сообщений: 1564
Вы уверены, что Date типа smalldatetime?
Во втором запросе у вас оно нигде не исрльзуется, поэтому и отрабатывает
25 дек 09, 12:50    [8118243]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Rwety
Member

Откуда:
Сообщений: 37
-=DiM@n=-,

Decimal в DateTime
SELECT  ID FROM Raspisanie WHERE (rDate>DATEADD(Day, -@Period, GetDate()))
, где Date - название колонки с данными в формате smalldatetime.

если написать такой запрос:
Declare @Period int = 365;
	DECLARE @rDate smalldatetime;
	SET @rDate = (SELECT rDate FROM Raspisanie WHERE ID = 65)
	SELECT  ID FROM Raspisanie WHERE (@rDate<DATEADD(Day, -@Period, GetDate()))

Вот так должно быть. я описался, и ненашел как отредактировать свое сообщение(на этом форуме это вообще возможно?)
25 дек 09, 12:56    [8118288]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Может, @Period>40170? Для SMALLDATETIME сегодня это невозможно.
И какое сообщение сервер выдаёт?
25 дек 09, 12:56    [8118290]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Rwety
ненашел как отредактировать свое сообщение(на этом форуме это вообще возможно?)
На этом форуме это невозможно.
25 дек 09, 12:58    [8118302]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Rwety
Member

Откуда:
Сообщений: 37
iap,
@Period я задаю сам, и оно меньше 40170.
Выдает: не удается преобразовать значение параметра Decimal в DateTime.
25 дек 09, 13:04    [8118339]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Rwety
iap,
@Period я задаю сам, и оно меньше 40170.
Выдает: не удается преобразовать значение параметра Decimal в DateTime.
По тем данным, которые Вы здесь привели,
такое возможнро, только если rDate типа DEC, а не SMALLDATETIME
25 дек 09, 13:08    [8118363]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
странно,конечно... НО почемуб не вычислить заранее
DATEADD(Day, -@Period, GetDate()))
и просто не подставить в запрос
Да и такой запрос
SELECT  ID FROM Raspisanie WHERE (@rDate<DATEADD(Day, -@Period, GetDate()))

выглядит странно
может все таки

SELECT  ID FROM Raspisanie WHERE (rDate<DATEADD(Day, -@Period, GetDate()))
?
-------------------------------------
Jedem Das Seine
25 дек 09, 13:11    [8118380]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Rwety
Member

Откуда:
Сообщений: 37
iap,
В прикрепленный файл смотрите раз,
запрос
Declare @Period int = 365;
	DECLARE @rDate smalldatetime;
	SET @rDate = (SELECT rDate FROM Raspisanie WHERE ID = 65)
	SELECT  ID FROM Raspisanie WHERE (@rDate<DATEADD(Day, -@Period, GetDate()))

работает без проблем, значит данные не в dec формате
25 дек 09, 13:16    [8118415]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Выдает: не удается преобразовать
> значение параметра Decimal в DateTime

кто выдает? это вы цитируете сообщение об ошибке, или
своими словами передаете?

Posted via ActualForum NNTP Server 1.4

25 дек 09, 13:18    [8118429]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @t table (s smalldatetime, i int identity(1,1))

insert into @t (s)
select '19900101'
union all
select '19800101'
union all
select '20000101'
union all
select '20010101'
union all
select '20100101'

declare @x smalldatetime, @i int
set @x = (select s from @t where i = 2)
set @i = 40170
select i from @t 
where (@x<DATEADD(Day, -@i, GetDate()))

странно - никаких ошибок нет
-------------------------------------
Jedem Das Seine
25 дек 09, 13:27    [8118476]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Maxx
declare @t table (s smalldatetime, i int identity(1,1))

insert into @t (s)
select '19900101'
union all
select '19800101'
union all
select '20000101'
union all
select '20010101'
union all
select '20100101'

declare @x smalldatetime, @i int
set @x = (select s from @t where i = 2)
set @i = 40170
select i from @t 
where (@x<DATEADD(Day, -@i, GetDate()))

странно - никаких ошибок нет
-------------------------------------
Jedem Das Seine
Ничего странного: во-первых, я говорил про "сегодня больше 40170", а, во-вторых, GETDATE() возвращает не SMALLDATETIME, а DATETIME.
Ясно же, что DATEADD(DAY,-40171, GETDATE()) вернёт '18991231', а минимально допустимое значение SMALLDATETIME - '19000101'

Но в чём-то Вы правы: в авторском примере дни отнимаются именно от GETDATE().
Так что я, строго говоря, ступил.
25 дек 09, 13:43    [8118601]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Rwety
Member

Откуда:
Сообщений: 37
Спасибо всем за помощь. помог Maxx.
я заменил на переменную выражение DATEADD(Day, -@Period, GetDate())) и все заработало.
Но всеравно странно почему первый раз не работало)
25 дек 09, 13:44    [8118611]     Ответить | Цитировать Сообщить модератору
 Re: Выбор даты с использованием DateAdd  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap,
ну вообщем я и хотел сказать что получить ошибку аналогичную ТС мне никакми образом не удалось :( Если я правильно понял пример данных
25 дек 09, 13:46    [8118626]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить