powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как выбрать пустые строки(G0 is null or G0 = '')?
25 сообщений из 61, страница 1 из 3
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557714
Добрый день.

В табличке TST
DDL
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TST (
    ID  INTEGER NOT NULL,
    G0  VARCHAR(10),
    G1  VARCHAR(10),
    G2  VARCHAR(10)
);



данные:
IDG0G1G21АБВ23<null>4<null><null><null>5АБВ6А<null><null>7<null>БВ
Нужно выбрать все строки, в которых значения полей g0, g1 и g2 были пустыми. "Пустые" - это либо null, либо "пустая строка" ('').

Вот так работает:
Код: sql
1.
2.
3.
4.
5.
select *
from TST T
where (G0 is null or G0 = '') and
      (G1 is null or G1 = '') and
      (G2 is null or G2 = '') 


вывод:

IDG0G1G223<null>4<null><null><null>
Вопрос: а нет ли для строк в FB чего-либо более компактного, чем G0 is null or G0 = '' , какой-нибудь конструкции IsEmptySTR... - ?
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557726
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NULLIF(G0, '') IS NULL
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557733
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coalesce(G0,'') = ''
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557735
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятница> Вопрос: а нет ли для строк в FB чего-либо более компактного

Есть, и NULLIF, и коалеска, но они не индексируются. Так что лучше длиньше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557742
Как бы не особо-то и компактнее, "прозрачнее":
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
from TST T
where (G0 is null or G0 = '') and
      (G1 is null or G1 = '') and
      (G2 is null or G2 = '') 
...
where nullif(G0, '') is null and
      nullif(G1, '') is null and
      nullif(G2, '') is null
...
where coalesce(G0, '') = '' and
      coalesce(G1, '') = '' and
      coalesce(G2, '') = ''



Гаджимурадов Рустам...
Есть, и NULLIF, и коалеска, но они не индексируются. Так что лучше длиньше.

ОК
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557747
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять трололо...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557750
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO, если у поля отсутствует смысл в NULL - делать поле изначально NOT NULL и тогда никаких таких извращений не понадобится.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557753
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного не по теме.

При оформлении запроса писать and удобнее в начале а не в конце.
Что бы любую строку в where можно было закомментарить - удобнее когда каждая строка начинается с and .
Но первая строка не может так начинаться, поэтому я пишу вот так:

Код: plsql
1.
2.
3.
4.
5.
6.
select *
from TST T
where (1=1)
  and (G0 is null or G0 = '')
  and (G1 is null or G1 = '')
  and (G2 is null or G2 = '')
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557754
fraksIMHO, если у поля отсутствует смысл в NULL - делать поле изначально NOT NULL и тогда никаких таких извращений не понадобится.
Это да. Но есть существующие системы.
...
PS: Интересно, почему для строк в СУБД не сделали пустое значение равным NULL. Именно для строк.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557755
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятницаPS: Интересно, почему для строк в СУБД не сделали пустое значение равным NULL. Именно для строк.
Потому что NULL и пустая строка - это разные вещи и для строк тоже.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557759
fraksНемного не по теме.

При оформлении запроса писать and удобнее в начале а не в конце.
Что бы любую строку в where можно было закомментарить - удобнее когда каждая строка начинается с and .
...
И насчет запятых - то же самое.
Но форматтер текста в IBExpert думает иначе, к сожалению. Возможно, его можно переучить, да вот не знаю как.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557764
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.11.2017 18:13, Скоро пятница пишет:
> Интересно, почему для строк в СУБД не сделали пустое значение равным NULL. Именно для строк.

переходи на оракел.
там это сделали.
изначально.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557765
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятницаfraksНемного не по теме.

При оформлении запроса писать and удобнее в начале а не в конце.
Что бы любую строку в where можно было закомментарить - удобнее когда каждая строка начинается с and .
...
И насчет запятых - то же самое.
Но форматтер текста в IBExpert думает иначе, к сожалению.
Ни разу не пользовался форматтером :)
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557769
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятница,
если вы считаете что пустая строка и значение null для вашей таблицы одинаковы - проведите замену постого значения на null и потом будет вам компактно и красиво.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557774
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятницаВопрос: а нет ли для строк в FB чего-либо более компактного, чем G0 is null or G0 = '' , какой-нибудь конструкции IsEmptySTR... - ?

Готовых нет. Но в Firebird 3 появилась возможность делать хранимые функции. Типа как хранимые процедуры но вызывать можно как функции.
И думаю что твоя "IsEmptySTR" будет состоять буквально из одной строки.
Правда с индексами в таких условиях будет все плохо...
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557775
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush> проведите замену постого значения на null и потом будет вам компактно и красиво.

Это ж додуматься надо, потроллить ведь нечем будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557776
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushСкоро пятница,
если вы считаете что пустая строка и значение null для вашей таблицы одинаковы - проведите замену постого значения на null и потом будет вам компактно и красиво.

Кстати да.
Если нельзя добавить NOT NULL на поле - можно сделать триггер заменяющий NULL на пустую строку.
Такое наверняка проканает и в существующих системах.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557787
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скоро пятницаКак бы не особо-то и компактнее, "прозрачнее":
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select *
from TST T
where (G0 is null or G0 = '') and
      (G1 is null or G1 = '') and
      (G2 is null or G2 = '') 
...
where nullif(G0, '') is null and
      nullif(G1, '') is null and
      nullif(G2, '') is null
...
where coalesce(G0, '') = '' and
      coalesce(G1, '') = '' and
      coalesce(G2, '') = ''




Хочется компактнее тогда вот так
Код: sql
1.
2.
...
where coalesce(G0||G1||G2, '') = ''
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557809
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mХочется компактнее тогда вот такНет
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39557816
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгенийm7mХочется компактнее тогда вот такНет

Ну да, таки ты прав
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39558034
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий22.11.2017 18:13, Скоро пятница пишет:
> Интересно, почему для строк в СУБД не сделали пустое значение равным NULL. Именно для строк.

переходи на оракел.
там это сделали.
изначально.

Наверное, какие-то внутренние причины для разделения у разработчиков FB были, но с прикладной т.зр. - имхо, от разделения в строках (varchar) null и '' - один гемор.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39558037
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНаверное, какие-то внутренние причины для разделения у разработчиков FB были
у разработчиков ФБ причин не было. А у разработчиков ИБ были - стандарт sql и вообще правила РСУБД. Скорее, тут надо говорить про причины у разработчиков Оракла.
https://habrahabr.ru/post/127327/

"Если последовать завету классика и посмотреть в корень, то причину эквивалентности пуcтой строки и NULLа можно найти в формате хранения varchar`ов и NULLов внутри блоков данных. Oracle хранит строки таблицы в структуре, состоящей из заголовка, за которым следуют столбцы данных. Каждый столбец представлен двумя полями: длина данных в столбце (1 или 3 байта) и, собственно, сами данные. Если varchar2 имеет нулевую длину, то в поле с данными писать нечего, оно не занимает ни байта, а в поле с длиной записывается специальное значение 0xFF, обозначающее отсутствие данных. NULL представлен точно так же: поле с данными отсутствует, а в поле с длиной записывается 0xFF. Разработчики Оракла могли бы, конечно, разделить эти два состояния, но так уж издревле у них повелосью"

p.s. насколько я помню, даже у Парадокса в 1991-1993 годах было понятие "blank", т.е. null, для всех типов данных.
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39558042
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНаверное, какие-то внутренние причины для разделения у разработчиков FB были

причём тут разработчики FB? NULL и пустая строка разные сущности ещё со времён Interbase
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39558078
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*сарказм* Ага, а для чисел NULL сделать эквивалентным 0, чего сущности плодить
...
Рейтинг: 0 / 0
Как выбрать пустые строки(G0 is null or G0 = '')?
    #39558093
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2а для чисел NULL сделать эквивалентным 0*сарказм off* Не надо.

и для строк, кстати тоже не надо. Я бы хотел различать ситуации когда у меня пустая строка и когда я прицепил лефт джойном нечто а там нет строки совсем.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как выбрать пустые строки(G0 is null or G0 = '')?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]