Я бы не хотел, чтобы в моем коде было много проверок вроде следующего:
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
таблице не существует.
Попробуй это
например
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()
с двумя аргументами.источник
ifnull
я хотел ... Мне просто нужно было снять квадратные скобки, которые я использовал.Если
ISNULL()
метода нет, вы можете использовать это выражение вместо:CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Это работает так же, как
ISNULL(fieldname, 0)
.источник
ifnull
является SQLite-эквивалентомisnull
функции, о которой задан вопрос. Всем, кто читает это сейчас, просмотрите ответ SQLMenace (тем не менее, полученный более чем за полтора года ранее), прежде чем писать собственное решение с использованиемCASE
.CASE
операторов может иметь больше смысла, чемIFNULL
.isnull
в других системах, и я не хотел бы побуждать людей «кататься самостоятельно».Используйте
IS NULL
илиIS NOT NULL
в предложении WHERE вместо метода ISNULL ():SELECT myField1 FROM myTable1 WHERE myField1 IS NOT NULL
источник
myField1
с ненулевым значением, он хочет заменить значение в столбце результата другим, если значение строки равно нулю.Для эквивалента NVL () и ISNULL () используйте:
IFNULL(column, altValue)
column
: Столбец, который вы оцениваете.altValue
: Значение, которое вы хотите вернуть, если "столбец" равен нулю.Пример:
SELECT IFNULL(middle_name, 'N/A') FROM person;
* Примечание: функция COALESCE () работает так же, как и для других баз данных.
Источники:
источник
Вы можете легко определить такую функцию и затем использовать ее:
или та же минифицированная версия:
источник