我想避免在我的代码中进行如下的许多检查:
myObj.someStringField = rdr.IsDBNull(someOrdinal)
? string.Empty
: rdr.GetString(someOrdinal);
Run Code Online (Sandbox Code Playgroud)
我想我可以让我的查询通过执行以下操作来处理空值:
SELECT myField1, [isnull](myField1, '')
FROM myTable1
WHERE myField1 = someCondition
Run Code Online (Sandbox Code Playgroud)
我虽然使用SQLite,但似乎没有认识到这个isnull功能.我也试过其他数据库中的一些公认的那些等效(NVL(),IFNULL()和COALESCE()),但SQLite的似乎不认识任何人.
有没有人有任何建议或知道更好的方法来做到这一点.不幸的是,数据库没有所有字段的默认值.另外,LEFT JOIN在某些情况下我需要使用一些子句,其中返回的某些字段将为null,因为LEFT JOIN表中的匹配记录将不存在.
编辑:与a_horse_with_no_name交谈我发现SQL中的"IS"略有不同,允许使用"IS" 在NULL 和值之间进行比较:stackoverflow.com/a/9102445/1470058.这给我带来了很多困惑.谢谢:
除非一个或两个操作数都为NULL,否则IS和IS NOT运算符的工作方式类似于=和!=.在这种情况下,如果两个操作数均为NULL,则IS运算符求值为1(true),IS NOT运算符求值为0(false).如果一个操作数为NULL而另一个操作数不为NULL,则IS运算符的计算结果为0(false),IS NOT运算符为1(true).IS或IS NOT表达式无法计算为NULL.运算符IS和IS的优先级与=不同.
我对SQLite中的关键字"IS"感到困惑.
我正在开发一个项目,要求我使用Java准备好的语句.我遇到过两种类型的WHERE子句:
SELECT * FROM table WHERE column = ?
Run Code Online (Sandbox Code Playgroud)
和
SELECT * FROM table WHERE column IS NULL
Run Code Online (Sandbox Code Playgroud)
我的问题是等号"="或"是"这个词之间存在差异吗?谷歌搜索显示,大多数人使用=进行价值比较,使用IS进行比较.但是我尝试了一些自己的SQLite查询.
我的问题是我可以在两种情况下都使用"IS"而没有出现意外结果吗?我想为一个查询做一个准备好的语句,该查询对列的约束可能是也可能不为null.我希望我一直有道理.
为了简化我所说的一切,我可以使用以下Java代码而不会因使用"IS"而产生意外影响:
private static final String queryProjectSql = "SELECT * FROM fields WHERE project IS ?";
// later in a method
sqlStatement = connection.prepareStatement(queryProjectSql);
sqlStatement.setString(1, project); //Project may be a String or …Run Code Online (Sandbox Code Playgroud)