![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 07.10.2008
Сообщений: 213
|
![]()
Вопрос в следующем: есть два поля с датой (datetime), одно поле - дата заказа товара, второе - дата покупки товара. Естественно, дата покупки может быть либо позже , либо в тот же день, что и заказ. ТО есть order_date <= sale_date. При этом поле sale_date может принимать значение NULL (order_date НЕ принимает NULL по умолчанию), т.е. товар заказан, но еще не куплен. Но ведь, если указана дата заказа, и при этом поле с датой покупки содержит NULL, то получается следующая ситуация (пример) : '17/06/2010' <= NULL, а такого быть не может...
Вопрос может, конечно, и легкий, но я никак не соображу, как выйти из такой ситуации (ставить вместо NULL какую-нибудь "левую" дату тоже не вариант). SQL Server 2005 Последний раз редактировалось tools; 17.06.2010 в 02:48. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Вы забыли упомянуть, в каком случае Вам нужно проверять условие!
Цитата:
В SQL есть такой чудесный оператор coalesce вот его и использовать, например, так: Код:
|
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 07.10.2008
Сообщений: 213
|
![]()
Проверять условие в случае вставки новых данных... Спасибо за ответ, почитаем про coalesce, но тему лучше не закрывать, т.к. наверняка возникнут вопросы.
Хмм, это я так понял немного не то, функция возвращает первое ненулевое значение из числа аргументов. т.е. это для запросов, выборки данных. А мне необходимо поставить своего рода ограничения на эти поля, т.е. при вставке нового значения, поле с датой заказа мы заполняем обязательно (т.е. оно не содержит NULL), а поле с датой покупки либо NULL, либо имеет значение большее или равное дате заказа. Примеры: 1) order_date = '17/06/2010' sale_date = '23/06/2010' 2) order_date = '17/06/2010' sale_date содержит NULL 3) order_date = '18/06/2010' sale_date = '18/06/2010' Последний раз редактировалось Stilet; 17.06.2010 в 16:12. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Где и как Вы собираетесь делать проверку? (триггеры, ХП, на клиенте?)
Какая у Вас СУБД? поверьте - если там, где Вы собираетесь делать проверку, доступно использование coalesce, то это то, что Вам надо. смотрите: 1) order_date = '17/06/2010' sale_date = '23/06/2010' coalesce(sale_date,order_date) вернёт '23/06/2010' следовательно, '17/06/2010' <= '23/06/2010' order_date<=coalesce(sale_date,orde r_date) условие выполняется! 2) order_date = '17/06/2010' sale_date содержит NULL coalesce(sale_date,order_date) вернёт '17/06/2010' следовательно, '17/06/2010' <= '17/06/2010' order_date<=coalesce(sale_date,orde r_date) условие выполняется! (разумеется, в базу нужно сохранять NULL, а не результат функции coalesce(...) 3) order_date = '18/06/2010' sale_date = '18/06/2010' coalesce(sale_date,order_date) вернёт '18/06/2010' order_date<=coalesce(sale_date,orde r_date) условие выполняется! что Вам не нравится? Последний раз редактировалось Serge_Bliznykov; 17.06.2010 в 03:41. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 07.10.2008
Сообщений: 213
|
![]()
Приложение на Delphi соединяется с БД (используется sql server 2005). Я понял вашу мысль про coalesce, просто не совсем разобрался сначала с этой функцией. Скорее всего тут правильнее триггер написать "instead of insert", либо напрямую проверять вводимые даты в приложении.
Спасибо за ответы. P.S. В итоге, я решил просто в ограничения alter table'ом добавить Последний раз редактировалось tools; 17.06.2010 в 09:27. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 28.10.2008
Сообщений: 350
|
![]()
А в чём собственно загвоздка (не очень понятно)?
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
даты в си | Александе еть я | Помощь студентам | 0 | 06.05.2010 22:13 |
Автоматизация заполнения даты и зависимость ячейки времени к ячейке даты. | Каравай | Microsoft Office Excel | 14 | 11.03.2010 18:11 |
Проверка даты | Михаил Юрьевич | Общие вопросы Delphi | 11 | 24.01.2010 20:39 |
Даты | Sparky | БД в Delphi | 6 | 02.10.2009 09:48 |
Даты не даты | Nasya | Microsoft Office Excel | 3 | 22.08.2007 20:18 |