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

Откуда:
Сообщений: 356
Здравствуйте, вот пара запросов где идёт работа с открытыми датами, которые соответсвенно равны null

SELECT * from 
	(select ps.pcode,ps.vcode,ps.daterun,isnull(ps.dateend,'30000101') dateend
			,ps.price,ps.nomen,ps.UPACKCODE 
		from PRICESNORM p
			join v_PRICESNORMSPECS ps ON p.VCODE=ps.pcode
		where p.vcode=4689
	)t
	WHERE t.dateend>'20140531'
		and t.DATERUN<='20140531' 
ORDER BY t.VCODE

select ps.pcode,ps.vcode,ps.daterun,isnull(ps.dateend,'30000101') dateend
			,ps.price,ps.nomen,ps.UPACKCODE 
		from PRICESNORM p
			join v_PRICESNORMSPECS ps ON p.VCODE=ps.pcode
		where p.vcode=4689
			and ps.DATERUN<='20140531'
			AND (ps.DATEEND IS NULL OR ps.DATEEND >'20140531')


в первом я избавился от NULL через подзапрос, это нормальный способ? или есть лучше и оптимальнее, если есть подскажите пожалуйста
Во втором способе я не стал от него избавляться, соответственно вопрос, правильно ли это? или от NULL нужно избавляться всегда?

таблица с данными во вложенном файле

К сообщению приложен файл (Книга1.xls - 19Kb) cкачать
10 июн 14, 08:31    [16146475]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
соответственно вопрос, правильно ли это? или от NULL нужно избавляться всегда?

Вы спрашивате, почему в вашей системе разрешены NULL-ы ?
Разве не вы определяли, нужны они или нет ?


R-Magistr
в первом я избавился от NULL через подзапрос,

Ваш вложенный запрос ничего не делает с NULL-ми
10 июн 14, 09:54    [16146818]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9160
R-Magistr, Вы не "избавляетесь", а учитываете null значения как добавляемые в итог запроса.
10 июн 14, 10:41    [16147109]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Glory
R-Magistr
соответственно вопрос, правильно ли это? или от NULL нужно избавляться всегда?

Вы спрашивате, почему в вашей системе разрешены NULL-ы ?
Разве не вы определяли, нужны они или нет ?


R-Magistr
в первом я избавился от NULL через подзапрос,

Ваш вложенный запрос ничего не делает с NULL-ми


Ну он вместо них подставляет 3000-й год, потом в дальнейшем я могу уже не делать лишний раз проврку is null, такой вариант нормальный для написания кода? или это кошмар и ламерство полное ))) Если ламерство, то как нормально писать? ))))
10 июн 14, 10:53    [16147209]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Glory
Member

Откуда:
Сообщений: 104751
R-Magistr
такой вариант нормальный для написания кода?

Нормальный для чего ?
Для оптимизатора - это лишнее усложнение
Для вас - кто знает, какие у вас критерии нормальности
10 июн 14, 10:56    [16147232]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
R-Magistr
Member

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

Для оптимизатора.
Выходит всегда нужно придерживаться второго варианта?
10 июн 14, 11:03    [16147286]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9160
R-Magistr, смотрите на план запроса в конкретном случае.
10 июн 14, 12:29    [16148136]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2428
R-Magistr
он вместо них подставляет 3000-й год,

есть такой оператор
isnull
10 июн 14, 13:15    [16148493]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Гуманитарии и Мифы, неразлучная парочка.
10 июн 14, 16:12    [16149938]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3789
R-Magistr
Glory,

Для оптимизатора.
Выходит всегда нужно придерживаться второго варианта?

оптимальнее всего сразу в данных заменять
10 июн 14, 17:32    [16150615]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
R-Magistr
Ну он вместо них подставляет 3000-й год, потом в дальнейшем я могу уже не делать лишний раз проврку is null, такой вариант нормальный для написания кода? или это кошмар и ламерство полное ))) Если ламерство, то как нормально писать? ))))
Это ламерство. Но код тут не причём.

Система должна быть удобной и работать эффективно.
3000 год это не удобно ибо не понятно, а почему не 2999й? Не должнен юзверь об этом думать и тупить.
Гуй должен явно показать пользователю что "дата не закрыта", "данные не определены" и т.п. в зависимости от смысла.

Скуль не должен этим заниматься. Это проблемы клиента.
И скуль не должен заниматься проблемами реализации клиента.
Дата "не определена", так и должен возвращать клиенту (NULL) и не 0 и не -1 и не 3000, и не MaxInt, MaxDateTime или другой неведомой хренью. Не надо засорять информационную систему и мозги разрабов волшебными константами.

R-Magistr
Ну он вместо них подставляет 3000-й год
Повторяю это проблемы разработчика Гуя, если он лопух и повесил неправильный контрол или неправильно обработал значения - сам себе буратино.

Если какой нибудь говёный кодер C# будет навязывать SQLю типы данных и интерфейсы или форматы и обработку данных удобную для его среды, смело дайте подзатыльник, ибо это он должен прогибаться под интерфейсы и принципы работы SQL. Не наоборот.
У него для этого есть инструментов вагон и маленькая тележка и там это будет на несколько порядков эффективнее.

У каждого протокола передачи есть свои стандарты, правила и форматы, и нужно на каждом этапе правильно их состыковывать. И не заниматься сквозным туннелированием этих условий, да так что SQL вдруг определяет какой формат даты (к примеру) будет на клиенте. У каждой системы должна быть своя локальная область ответственности и только свой набор функционала.

PS: Стандартный контрол даты в вянде умеет отображать состояние "дата не определена", путём отображения чекбокса внутри контрола. Это к примеру, ибо гуи бывают разными.
10 июн 14, 21:05    [16151438]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3789
Mnior
Скуль не должен этим заниматься. Это проблемы клиента.

Это бест практис вообще-то. Не надо пренебрегать колесами изобретенными уже 100500 раз
11 июн 14, 16:50    [16156058]     Ответить | Цитировать Сообщить модератору
 Re: как правильно избавляться от NULL и стоит ли?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Ivan Durak, в своём репертуаре. Помедвежить.
12 июн 14, 22:48    [16159840]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить