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
таблица не будет существовать.
Решение
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 () работает так же, как и для других баз данных.
Источники:
- Функция Coalesce () (W3Schools)
- SQL, как понял SQLite (Веб -сайт SQLite)
Вы можете легко определить такую функцию и затем использовать ее:
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);}