SQLite эквивалентно ISNULL (), NVL (), IFNULL () или COALESCE () - PullRequest
84 голосов
/ 28 апреля 2009

Я бы хотел, чтобы в моем коде было много проверок, подобных приведенным ниже:

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 не будет существовать.

Ответы [ 6 ]

120 голосов
/ 28 апреля 2009

IFNULL, см. Здесь: http://www.sqlite.org/lang_corefunc.html#ifnull

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

35 голосов
/ 24 июня 2013

Попробуйте это

ifnull(X,Y)  

например,

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

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

23 голосов
/ 19 декабря 2010

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

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

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

2 голосов
/ 06 июля 2016

Используйте IS NULL или IS NOT NULL в предложении WHERE вместо метода ISNULL ():

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
1 голос
/ 11 октября 2018

Для эквивалента NVL () и ISNULL () используйте:

IFNULL(column, altValue)

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

altValue: значение, которое вы хотите вернуть, если 'column' равно нулю.

Пример:

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

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

Источники:

0 голосов
/ 18 апреля 2015

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

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);}
...