Topic: пустая строка в место NULL

SQLExecute('SELECT IFNULL(frm, "$00C08000") FROM color WHERE id=1')

проблема этого скрипта в том, что если поле пусто или отсутствует, то возвращается пустая строка а не NULL

помогите получить NULL

Re: пустая строка в место NULL

Могу предложить пару вариантов:


Этот вариант вернет или значение из поля frm, или заранее указанное значение, если запись не будет найдена. Из минусов - выборка будет по всей таблице.

select distinct
(case 
when ( select count(*) from color where id = 1 ) = 0 then '$00C08000'
else ( select frm from color where id = 1 )
end ) as ColorValue
from color

Этот вариант лучше по производительности, но в последнем условии нужно указать ID существующей записи.

select
(case 
when ( select count(*) from color where id = 1 ) = 0 then '$00C08000'
else ( select frm from color where id = 1 )
end ) as ColorValue
from color where id = x

Кстати, последняя строка в обоих примерах может содержать обращение к любой таблице. Если у вас есть таблица с одной записью ( какой -нибудь config ), то она идеально подойдет.

Визуальное программирование: блог и телеграм-канал.

Re: пустая строка в место NULL

k245 wrote:

Могу предложить пару вариантов

спасибо!
может написать функцию по типу iif у меня много подобных запросов

4 (edited by sibprogsistem 2021-05-02 12:40:54)

Re: пустая строка в место NULL

написал Функцию
   
iifNulZero(X,Y,Z);
 
X - условие выборки
Y - возвращаемый ответ если поле не найдено
Z - возвращаемый ответ если в поле пустая строка
 
iifNulZero('SELECT IFNULL(frm,"$00C08000") FROM color WHERE id=1', '$00C08000','$00C08000');
 

function iifNulZero (var X,Y,Z: string): string;
begin
  if (SQLExecute('SELECT EXISTS('+X+')') <> '0') then 
    begin
        if (SQLExecute(X) <> '') then Result:=SQLExecute(X) else Result:=Z;
  end else Result:=Y ;
end;

begin
end.