Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Or (Not(Выборка2.ДатаОплаты Is Null)) (число прочтений - 3765 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Or (Not(Выборка2.ДатаОплаты Is Null))
Ответ #15 - 21. Октября 2010 :: 06:08
Печать  
Не надо путать понятие пустого значения для 1С и для SQL. Для SQL пустое значение это NULL, а для 1С все не так. Мое предположение такое. 1С делит понятие пустого значения для объектов из базы и для объектов в памяти (преобразованных во внутреннее представление). Так, агрегатные значения (ТипЗначения(Что) > 9) совпадают с тем что в базе SQL (может быть исключением является неопределенный тип). А вот с типом типа Дата 1С сильно пришлось поработать. Так дата, как и в SQL считается как количество некоторых единиц от начала отсчета. Началом отсчета для Объекта дата является РабочаяДата() - Дата(0). Но поскольку в SQL началом отсчета для типа DateTime есть совсем другое количество единиц и это внутренне представление, то в 1С и возникла дилема как же это реализовать в базе. Вот они и придумали что в базу, в качестве нулевой даты записывать не количество дней от начала отсчета (потому как в SQL это все же тип дата) а какую то дату. Вот примерно так.

А по существу, то в базе 1С вы нигде не найдете значения NULL, видимо с этим тоже связано ряд каких то замыслов при проектировании ядра 1С.
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Каюсь
Ответ #16 - 21. Октября 2010 :: 06:55
Печать  
гм. признаю свою неправоту - мой вариант не работает для 1С, однако и утверждение, что вместо пустой даты стоит какая-то конкретная - тоже неверно, по крайней мере для ДБФ-баз - там лежат 8 пробелов.

pvase писал(а) 21. Октября 2010 :: 06:08:
А по существу, то в базе 1С вы нигде не найдете значения NULL, видимо с этим тоже связано ряд каких то замыслов при проектировании ядра 1С.

А вот это неверно. Для дат сравнение IS NULL и IS NOT NULL не работает - это верно, но для ссылок на справочники или документы - проходит на "УРА"!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Or (Not(Выборка2.ДатаОплаты Is Null))
Ответ #17 - 21. Октября 2010 :: 07:17
Печать  
Ну хорошо будем считать надо или не надо
делать явные преобразования типов в t-sql вопросом религии.


Надо  ли отвечать на ошибочные и/или неправильные,неточные утверждения которые идут после поста10  ???
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Or (Not(Выборка2.ДатаОплаты Is Null))
Ответ #18 - 21. Октября 2010 :: 14:24
Печать  
pvase писал(а) 20. Октября 2010 :: 19:27:
Скорее всего да, если следовать стандарту языка SQL (не помню названия и номера), то лучше конечно же использовать преобразование в явном виде. Да и сам стараюсь везде где возможно использовать переменные с присвоением им явно типа с конвертацией:
Код
Выбрать все
DECLARE @D DateTime
SET @D = Convert(DateTime,'20101020',112) 



а потом уже переменную использовать в запросе. Хотя это дело привычки.

Если речь об 1с++ то лучше использовать модификатор ~~
т.е       :Дата_Х~~
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать