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

Откуда:
Сообщений: 5
Через приложение c# элемент dateTimePicker задаю дату. Точно такая же дата есть и таблицу Поставлено, но тем не менее этот триггер срабатывает.
IF exists( SELECT * 
               FROM inserted i inner join Поставка p 
			   ON i.КодПоставки = p.КодПоставки and i.ДатаПоставки <> p.ДатаПоставки
             )
	   BEGIN
		   RAISERROR('ОШИБКА ДАТЫ, ДатаПоставки будет изменена автоматически!', 16, 1);
	   END;
9 июн 14, 18:20    [16144694]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Значит не точно такая же дата.
9 июн 14, 18:21    [16144699]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
msLex
Member

Откуда:
Сообщений: 9271
Александр Студ
Через приложение c# элемент dateTimePicker задаю дату. Точно такая же дата есть и таблицу Поставлено, но тем не менее этот триггер срабатывает.
IF exists( SELECT * 
               FROM inserted i inner join Поставка p 
			   ON i.КодПоставки = p.КодПоставки and i.ДатаПоставки <> p.ДатаПоставки
             )
	   BEGIN

declare @t varchar(100)
select top 1 @t = cast(datediff(ms, i.ДатаПоставки, p.ДатаПоставки) as varchar(100))
fROM inserted i inner join Поставка p 
			   ON i.КодПоставки = p.КодПоставки and i.ДатаПоставки <> p.ДатаПоставки

set @t = 'ОШИБКА ДАТЫ, ДатаПоставки будет изменена автоматически! (' + @t + ' мс)'
		   RAISERROR(@t, 16, 1);
	   END;
9 июн 14, 18:27    [16144713]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Может NULL = NULL это FALSE ?
9 июн 14, 19:06    [16144851]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Александр Студ
Через приложение c# элемент dateTimePicker задаю дату.

Стоит сравнить даты до милисекунд.
А лучше всего преобразовать обе даты, вычистив время, и только после этого сравнивать.
9 июн 14, 19:31    [16144907]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

Откуда:
Сообщений: 340
Александр Студ
Через приложение c# элемент dateTimePicker задаю дату. Точно такая же дата есть и таблицу Поставлено, но тем не менее этот триггер срабатывает.
IF exists( SELECT * 
               FROM inserted i inner join Поставка p 
			   ON i.КодПоставки = p.КодПоставки and i.ДатаПоставки <> p.ДатаПоставки
             )
	   BEGIN
		   RAISERROR('ОШИБКА ДАТЫ, ДатаПоставки будет изменена автоматически!', 16, 1);
	   END;


Каким образом определено, что "дата точно такая же"?
Явно смотрели значения или опираетесь на "я же сам лично вводил ту же дату, что и базе... своими руками"?
dateTimePicker может передавать в SQL дату в несоответствующем формате (там же дозволительна игра с разделителями... и по умолчанию, кажись - слэш, а не тире), SQL ее съедает как null и в итоге - неравенство и срабатывает
9 июн 14, 20:08    [16145017]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Александр Студ
Member

Откуда:
Сообщений: 5
SSn888, В таблице дата выводиться без указания часов, минут и секунд, если в таком виде оно и храниться, то значит они равные. Как NULL sql не может воспринимать значение передаваемое datetimepicker'ом, потому что остальные значения ним же и вводились. Возможно SQL как-то преобразовует формат даты, на я не знаю как это посмотреть.
9 июн 14, 20:32    [16145086]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Александр Студ
дата выводиться без указания часов, минут и секунд, если в таком виде оно и храниться, то значит они равные.

Т.е. вы не знаете, как хранится ваше дата - сос верменем или без ?

Александр Студ
Как NULL sql не может воспринимать значение передаваемое datetimepicker'ом, потому что остальные значения ним же и вводились.

Любое сравнение с NULL есть НЕОПРЕДЕЛЕННОСТЬ.
9 июн 14, 20:37    [16145109]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Александр Студ
SSn888, В таблице дата выводиться без указания часов, минут и секунд, если в таком виде оно и храниться, то значит они равные. Как NULL sql не может воспринимать значение передаваемое datetimepicker'ом, потому что остальные значения ним же и вводились. Возможно SQL как-то преобразовует формат даты, на я не знаю как это посмотреть.
Что сложного вывести значения на экран и посмотреть, зачем такие страдания?
9 июн 14, 20:45    [16145138]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

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

Спасибо :)

Вот все ждал - когда ж большие теоретики попробуют все-таки проверить на практике :)
вместо того, чтоб убеждать, что 2 + 2 = 3.9999999999999999999
9 июн 14, 21:01    [16145179]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

Откуда:
Сообщений: 340
Glory
Любое сравнение с NULL есть НЕОПРЕДЕЛЕННОСТЬ.


не совсем... если в ON или WHERE - то срабатывает как "ой, да ничего подобного"

пробуем:

declare @d datetime
select 'a'
where getdate() <> @d 
9 июн 14, 21:12    [16145206]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SSn888
пробуем:

declare @d datetime
select 'a'
where getdate() <> @d 

А что тут должно получиться, кроме пустого набора ?
9 июн 14, 23:19    [16145716]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

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

а когда говорил, что он должен быть непустым?
я говорил, что в некоторых ситуациях "неопределенность" превращается в гарантированное "false" %)
10 июн 14, 00:00    [16145896]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
msLex
Member

Откуда:
Сообщений: 9271
SSn888
Glory,

а когда говорил, что он должен быть непустым?
я говорил, что в некоторых ситуациях "неопределенность" превращается в гарантированное "false" %)

неопределенность всегда в конце вычисления логического условия превращается в "false"
10 июн 14, 00:02    [16145905]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

Откуда:
Сообщений: 340
msLex
SSn888
Glory,

а когда говорил, что он должен быть непустым?
я говорил, что в некоторых ситуациях "неопределенность" превращается в гарантированное "false" %)

неопределенность всегда в конце вычисления логического условия превращается в "false"


в некоторых ситуациях она все же приводит к явным матюгам сиквела %)


и кстати, еще повод глянуть в сторону dateTimePicker
в каком формате он передает дату и в каком она лежит потом в базе?

ибо ... ну, короче будет нагляднуть

declare @inserted datetime
declare @in_db smalldatetime
set @inserted = getdate()
set @in_db = @inserted
select @inserted,@in_db  where @inserted<>@in_db
10 июн 14, 00:28    [16146007]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SSn888
Glory,

а когда говорил, что он должен быть непустым?
я говорил, что в некоторых ситуациях "неопределенность" превращается в гарантированное "false" %)

Объясните мне тогда, почему отрицание "гарантированного false" не становится true ?
declare @d datetime
select 'a'
where NOT (getdate() <> @d)
10 июн 14, 09:39    [16146740]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

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

Почитайте выше ответ msLex

Мне заниматься копипастом? :)
"в конце вычисления"
"конец" наступает в Вашем примере не после сравнения, а после not
10 июн 14, 09:42    [16146757]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SSn888
Почитайте выше ответ msLex

Это вы лучше почитайте вот это http://technet.microsoft.com/en-us/library/ms191504(v=sql.105).aspx
10 июн 14, 09:44    [16146769]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Александр Студ,

inserted - это для какой таблицы?
10 июн 14, 09:47    [16146780]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Александр Студ,

inserted - это для какой таблицы?
Триггер AFTER (FOR)?
Или INSTEAD OF?
10 июн 14, 09:48    [16146792]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

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

Я там должен был обнаружить новые сокровенные знания?
"Нравятся" мне такие "ответы по существу"...
Чем Вам не нравиться формулировка "если в логике появляется неопределенность, вызванная сравнением с нулевым значением - общий результат всего логического вычисления будет false"?
Мне лично споры, когда человек любой ценой доказывает что прав только он - методами вида "никакой это не серый цвет, а просто смесь белого и черного в пропорции 50 на 50... а не верите - почитайте в специальной литературе" - банально скушны
10 июн 14, 09:55    [16146820]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SSn888
Чем Вам не нравиться формулировка "если в логике появляется неопределенность, вызванная сравнением с нулевым значением - общий результат всего логического вычисления будет false"?

Хотя бы тем, что результат будет зависеть от настроек сессии
10 июн 14, 09:59    [16146837]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
SSn888
Member

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

Вы не поняли?
Еще раз - спорить про то, как правильно называется серый цвет - мне не интересно.
Даже если он зависит от настроек яркости освещения в комнате.
10 июн 14, 10:11    [16146899]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
Glory
Member

Откуда:
Сообщений: 104751
SSn888
Вы не поняли?
Еще раз - спорить про то, как правильно называется серый цвет - мне не интересно.
Даже если он зависит от настроек яркости освещения в комнате.

Это вы тупите
set ANSI_NULLS ON
GO
declare @d datetime
select 'a'
where getdate() <> @d
go

set ANSI_NULLS OFF
GO
declare @d datetime
select 'a'
where getdate() <> @d
go

Почему результат _разный_ ?
2 умножить на 2 - это 4, не число между 3 и 5

Скучно ему видетили спорить.
Веселее нести в массы аксиому об определенности работы с NULL-ми ?
10 июн 14, 10:15    [16146923]     Ответить | Цитировать Сообщить модератору
 Re: Не удается сравнить даты!  [new]
msLex
Member

Откуда:
Сообщений: 9271
SSn888
Чем Вам не нравиться формулировка "если в логике появляется неопределенность, вызванная сравнением с нулевым значением - общий результат всего логического вычисления будет false"?

тем что это неправда, в ссылке, которую привел Glory, это хорошо видно.

для примера

set ansi_nulls off -- или on, значение не имеет.

select 1
where
(1=null) or (1=1)
10 июн 14, 10:17    [16146940]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить