SQLite эквивалентен ISNULL(), NVL(), IFNULL() или COALESCE()

StackOverflow https://stackoverflow.com/questions/799375

  •  18-09-2019
  •  | 
  •  

Вопрос

Я бы хотел избежать множества проверок, подобных приведенной ниже, в моем коде:

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);

Я подумал, что мог бы просто попросить свой запрос позаботиться о нулях, сделав что-то вроде этого:

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition

Однако я использую SQLite, и, похоже, он не распознает isnull функция.Я также попробовал несколько эквивалентных, распознанных в других базах данных (NVL(), IFNULL() и COALESCE()), но SQLite, похоже, не распознает ни один из них.

У кого-нибудь есть какие-либо предложения или вы знаете лучший способ сделать это?К сожалению, база данных не имеет значений по умолчанию для всех полей.Кроме того, мне нужно использовать некоторые LEFT JOIN предложения в некоторых случаях, когда некоторые из возвращаемых полей будут равны нулю, поскольку соответствующая запись в LEFT JOIN таблица не будет существовать.

Это было полезно?

Решение

IFNULL, глянь сюда: http://www.sqlite.org/lang_corefunc.html#ifnull

Нет скобков вокруг функции

Другие советы

Попробуй это

ifnull(X,Y)  

например

select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....

А ifnull() Функция возвращает копию своего первого не нулевого аргумента или нулевого, если оба аргумента являются нулевыми. Ifnull() Должен иметь ровно 2 аргумента. А ifnull() функция эквивалентна coalesce() с двумя аргументами.

Если нет ISNULL() Метод, вы можете использовать это выражение вместо этого:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

Это работает так же, как и ISNULL(fieldname, 0).

Использовать IS NULL или же IS NOT NULL В методе, где вместо метода isnull ():

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

Для эквивалента использования nvl () и isnull ():

IFNULL(column, altValue)

column : Столбец, который вы оцениваете.

altValue : Значение, которое вы хотите вернуть, если «столбец», является нулевым.

Пример:

SELECT IFNULL(middle_name, 'N/A') FROM person;

*Примечание: функция Coalesce () работает так же, как и для других баз данных.

Источники:

Вы можете легко определить такую функцию и затем использовать ее:

ifnull <- function(x,y) {
  if(is.na(x)==TRUE) 
    return (y)
  else 
    return (x);
}

или та же уменьшенная версия:

ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top