比较Oracle SQL中的空值

Cli*_*ton 6 sql oracle null

如果两个值相等,如果它们可以是除以下之外的空值,是否有更好的比较方法?

a = b or (a is null and b is null)
Run Code Online (Sandbox Code Playgroud)

vol*_*ron 5

您可以:

a=b or coalesce(a,b) is null
Run Code Online (Sandbox Code Playgroud)

你也可以使用nvl,但这是一个遗留函数并且coalesce更快,因为它在第一个非null时停止

  • 这个答案有误导性:`nvl`和`coalesce`在大多数用途中执行等效(传递两列或一列和一个静态值).只有当第二个参数是函数或复杂评估(并且第一个参数为空)时,"coalesce"才能表现得更好. (2认同)

小智 0

您可以用 nvl 包装它并将其设置为集合中不需要的某个值:

NVL(a,0) = NVL(b,0)
Run Code Online (Sandbox Code Playgroud)

  • 如果 A 为 0 而 B 为空,则结果不同。 (5认同)