通过Oracle命令参数在where子句中传递null



使用下面的Oracle查询通过Oracle命令参数获取数据。

从tbl_name中选择count(*(,其中col_name=:col_name

如果我将:col_name value作为"some value"传递,它将起作用并返回一些计数。如果:col_name为null,则它不起作用。因为where子句col_name=null不正确。相反,我们需要使用col_name为null。

如何从c#实现这一点,基于col_name值我需要使用正确的查询。

col_name="某个值":从tbl_name中选择count((,其中col_name=:col_name col_name=null:从tbl_name中选择计数((,其中col_name为null

如何在一个查询中实现这一点。如果col_name为null,则需要使用第二个where子句查询,否则需要使用第一个where子句。

提前感谢

必须在查询中使用IS NULLIS NOT NULL来选择或排除NULL值:

Select count(*) from tbl_name where col_name IS NULL

SQL语言以及所有使用它的数据库都使用3值逻辑。任何布尔表达式都返回True、False和NULL。与编程语言不同,NULL不是一个特定的值。NULL表示该值为UNKNOWN。也许是因为它丢失了,或者是因为没有可存储的有意义的价值。

如果将UNKNOWN值与另一个值进行比较,则结果不能是UNKNOWN以外的任何值。因此,如果一个值为NULL,那么结果也是NULL。如果name为空,则name = NULLname != NULL都将返回null,而不会返回TrueFalse

在筛选(即WHERE、HAVING(和JOIN中,NULL被视为False,因此您的查询永远不会与NULL值匹配。毕竟,您要求所有符合特定条件的行,其中一些行的答案是I don't know if this matches or not。这些应该包括在结果中吗?I don't know。该语言无法猜测,因此它要求程序员明确说明是否应包括未知结果

要在一行上实现这一点,

使用租赁业务

(***(?***:*****

最新更新