Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка NULL-значений 
:(
    Опции темы
MadCoder
  Дата 29.9.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Доброго времени суток!

Подскажите, есть ли возможность настроить БД так, чтобы следующий код:
Код

select last_name+first_name+mid_name from users

выдавал не NULL, если одно из значений (last_name, first_name, mid_name) is NULL.

isNULL и COALESCE не предлагать - написать куча селектов в скриптах и программах, не хочется везде прописывать.

Также интересует, какие последствия кроме сложения с NULL это может дать: будут ли верно работать isNULL, is NULL, is not NULL и т.д.
PM WWW ICQ   Вверх
Akina
Дата 29.9.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(MadCoder @  29.9.2009,  11:27 Найти цитируемый пост)
есть ли возможность настроить БД так, чтобы следующий код:
выдавал не NULL, если одно из значений (last_name, first_name, mid_name) is NULL.

Запросто!
Один раз пройти по таблице и заменить Null на пустую строку. Изменить свойства полей, добавить Default Value (ту же пустую строку) и наложить требование Not Null.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 29.9.2009, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



CONCAT_NULL_YIELDS_NULL

Код

set CONCAT_NULL_YIELDS_NULL  off
select 'привет'+ v from 
  (select null v) s
where v is null

------
привет

(1 row(s) affected)



Добавлено через 3 минуты и 12 секунд
Цитата

Важно!
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
MadCoder
Дата 29.9.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Цитата(Zloxa @  29.9.2009,  11:22 Найти цитируемый пост)
Важно!В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.


Интересно, а почему так? Че это грозит?
PM WWW ICQ   Вверх
Zloxa
Дата 29.9.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(MadCoder @  29.9.2009,  11:46 Найти цитируемый пост)
Интересно, а почему так? 

Потому что фича лишь для обратной совместимости реализована
Цитата(MadCoder @  29.9.2009,  11:46 Найти цитируемый пост)
Че это грозит?

Там же написано...."В будущей версии Microsoft SQL Server эта возможность будет удалена"
Судя по тому, что M$ сделали с офисом и IE8, начинает казаться вполне допустимым, что эти угрозы могут сбыться.

Это сообщение отредактировал(а) Zloxa - 29.9.2009, 12:20


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 29.9.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



MadCoder, а почему непременно хочется оставить всё сделанным через то самое место? Какую великую смысловую нагрузку несут эти самые Null?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MadCoder
Дата 29.9.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Цитата(Akina @ 29.9.2009,  12:39)
MadCoder, а почему непременно хочется оставить всё сделанным через то самое место? Какую великую смысловую нагрузку несут эти самые Null?

Потому что в результате комплиментации нула, например если пользователь не указал свое отчество, у нас будет не фио, а NULL. ИзНулл везде переписывать не слишком хочется, но видимо придется.
PM WWW ICQ   Вверх
Akina
Дата 29.9.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Нет, блин, кому я тут распинаюсь-отвечаю, а? Ну переписывай...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SharedNoob
Дата 1.10.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5



юзайте вьюхи.
PM MAIL ICQ Skype   Вверх
DimW
Дата 2.10.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: нет
Всего: 44



Цитата(Akina @  29.9.2009,  10:54 Найти цитируемый пост)
Один раз пройти по таблице и заменить Null на пустую строку.

Akina,  а в MSSQL разве null и пустая строка это не одно и то же?  smile 

в оракле такого разделения нет:
Код

SQL> create table TABLE1
  2  (
  3    NAME VARCHAR2(50)
  4  );
 
Table created
SQL> insert into table1 values('');
 
1 row inserted
SQL> select nvl(t.name, 'null') from table1 t;
 
NVL(T.NAME,'NULL')
--------------------------------------------------
null


Добавлено через 5 минут и 6 секунд
Цитата(SharedNoob @  1.10.2009,  19:57 Найти цитируемый пост)
юзайте вьюхи. 

как использование вьюх спасет от переработки кода? 
PM MAIL ICQ   Вверх
Akina
Дата 2.10.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



DimW, я в ораклах ничего не понимаю, но ... Что будет если так:
Код

create table table1
(
id integer
name varchar2(50)
);

insert into table1 (id, name) values (1,'');
insert into table1 (id) values (2);

select * from table1 where name is null;
select * from table1 where name is not null;
? Конечно, 2 последних селекта тебе придётся модифицировать в синтаксис оракла.

Это сообщение отредактировал(а) Akina - 2.10.2009, 12:37


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 2.10.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



DimW, В M$ пустая строка не null

Akina, В оракле пустая строка is null (со всеми вытекающими, интуитивно неочевидными для пришельцев с других платформ: - типа length('') возвращает null а не 0)

 smile

Добавлено @ 12:55
Цитата(DimW @  2.10.2009,  12:17 Найти цитируемый пост)
как использование вьюх спасет от переработки кода?  

Вьюхи выставить клиенту вместо таблиц.
Во вьюхах вместо нулов возвращать пустые строки.

Вполне себе решение, если мы не имеем доступа к исходникам клиента.
Однако, я так понял, ТС полностью владеет оными.

Это сообщение отредактировал(а) Zloxa - 2.10.2009, 12:57


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 2.10.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(Zloxa @  2.10.2009,  13:46 Найти цитируемый пост)
В оракле пустая строка is null (со всеми вытекающими, интуитивно неочевидными для пришельцев с других платформ: - типа length('') возвращает null а не 0)

Какой ужас...  smile впрочем, по сравнению с закидонами MySQL это невинная детская шалость.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 2.10.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: нет
Всего: 44



Цитата(Akina @  2.10.2009,  12:36 Найти цитируемый пост)
Что будет если так:

Код

SQL> create table table1
  2  (
  3  id integer,
  4  name varchar2(50)
  5  );
 
Table created
SQL> insert into table1 (id, name) values (1,'');
 
1 row inserted
SQL> insert into table1 (id) values (2);
 
1 row inserted
SQL> select * from table1 where name is null;
 
                                     ID NAME
--------------------------------------- --------------------------------------------------
                                      1 
                                      2 
SQL> select * from table1 where name is not null;
 
                                     ID NAME
--------------------------------------- --------------------------------------------------


Цитата(Zloxa @  2.10.2009,  12:46 Найти цитируемый пост)
DimW, В M$ пустая строка не null

с дрожащими коленями совершаю ретуал сжения девственных книг по mssql запылившихся в нашем шкафу  smile

Добавлено через 1 минуту и 58 секунд
Цитата(Akina @  2.10.2009,  13:01 Найти цитируемый пост)
Какой ужас...  

взаимно  smile

Добавлено через 12 минут и 19 секунд
Цитата(Zloxa @  2.10.2009,  12:46 Найти цитируемый пост)
Вьюхи выставить клиенту вместо таблиц.

я уже не вчем не уверен, но:

Код

SQL> create table table1
  2  (id integer);
 
Table created
SQL> create or replace view table1 as
  2    select *
  3      from table1;
 
create or replace view table1 as
  select *
    from table1
 
ORA-00955: name is already used by an existing object
 
SQL> 


т.е. без переименования таблиц не обойтись.

PM MAIL ICQ   Вверх
Zloxa
Дата 2.10.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(DimW @  2.10.2009,  13:03 Найти цитируемый пост)
без переименования таблиц не обойтись.

Ну да.. когда я использовал слово "вместо", я счел что переименование либо перенос в другую схему подразумевается. smile

Цитата(Akina @  2.10.2009,  13:01 Найти цитируемый пост)
Какой ужас... 

ну, на самом деле к этому быстро привыкаешь.
Зато потом, привыкнув, ужасом кажестя когда конкатенация с null возвращает null smile /*Хотя.. это вполне логично.*/ И приходится интенсивно напрягать извилины, чтобы выдумать пример, когда понятия Null и "пустая строка" следует разделять и это действительно имеет смысл и выглядит разумно. smile

Это сообщение отредактировал(а) Zloxa - 2.10.2009, 13:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.