Я хочу, чтобы в моем коде не было много проверок:
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)
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()
с двумя аргументами.
ifnull
я хотел ... Мне просто нужно было снять квадратные скобки, которые я использовал.
Если метод ISNULL()
отсутствует, вы можете использовать это выражение вместо:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
Это работает так же, как ISNULL(fieldname, 0)
.
ifnull
является SQLite-эквивалентом функции isnull
о которой задавался вопрос. Всем, кто читает это сейчас, ознакомьтесь с ответом SQLMenace (тем не менее, более чем на полтора года назад), прежде чем писать собственное решение с использованием CASE
.
CASE
может иметь больше смысла, чем IFNULL
.
Используйте IS NULL
или IS NOT NULL
в предложении WHERE вместо метода ISNULL():
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
myField1
имеет ненулевое значение, он хочет заменить значение в столбце результата на другое, если значение строки равно нулю.
Вы можете легко определить такую функцию и использовать ее:
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);}