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

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

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

Ответ 2

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

ifnull(X,Y)  

e.g

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

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

Ответ 3

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

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

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

Ответ 4

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

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

Ответ 5

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

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