|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.06.2010, 01:58 | #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. |
17.06.2010, 02:50 | #2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Вы забыли упомянуть, в каком случае Вам нужно проверять условие!
Цитата:
В SQL есть такой чудесный оператор coalesce вот его и использовать, например, так: Код:
|
|
17.06.2010, 02:57 | #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. |
17.06.2010, 03:39 | #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. |
17.06.2010, 03:47 | #5 |
Форумчанин
Регистрация: 07.10.2008
Сообщений: 213
|
Приложение на Delphi соединяется с БД (используется sql server 2005). Я понял вашу мысль про coalesce, просто не совсем разобрался сначала с этой функцией. Скорее всего тут правильнее триггер написать "instead of insert", либо напрямую проверять вводимые даты в приложении.
Спасибо за ответы. P.S. В итоге, я решил просто в ограничения alter table'ом добавить Последний раз редактировалось tools; 17.06.2010 в 09:27. |
17.06.2010, 16:06 | #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 |