sqlite等效于isnull(),nvl(),ifnull()或cocce()
题
我想避免在我的代码中进行以下检查之类的检查:
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()
函数返回其第一个非null参数的副本,或者如果两个参数为null,则返回null。 Ifnull()
必须完全有2个参数。这 ifnull()
功能等效于 coalesce()
有两个论点。
如果没有 ISNULL()
方法,您可以使用此表达式:
CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END
这与 ISNULL(fieldname, 0)
.
利用 IS NULL
或者 IS NOT NULL
在where子中而不是isnull()方法:
SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL
对于NVL()和ISNULL()的等效词,请使用:
IFNULL(column, altValue)
column
:您正在评估的列。
altValue
:如果“列”为null,您要返回的值。
例子:
SELECT IFNULL(middle_name, 'N/A') FROM person;
*注意:cocece()函数的工作原理与其他数据库相同。
资料来源:
- cocece()函数 (W3Schools)
- SQL所理解的SQL (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);}