【发布时间】:2011-09-21 09:52:09
【问题描述】:
我想为 Oracle 数据库和 Microsoft SQL 服务器提供兼容的 SQL。
我想要一个兼容的 SQL 表达式,它将为非空字符串和非空字符串返回 true。
如果我使用:
column <> ''
它可以在 Microsoft SQL 服务器上工作,但不能在 Oracle 数据库上工作(因为 Oracle 的 '' 为空)
如果我使用:
len(column) > 0
它可以在 Microsoft SQL 服务器上工作,但不能在 Oracle 数据库上工作(因为它使用 length() )
【问题讨论】:
-
所以,即使
''在 Oracle 中是null,我仍然不明白为什么column <> ''不起作用。如果column具有(非空)值,则条件将 返回true,这就是您想要的。我错过了什么?此外,如果column为空,这意味着Oracle 为“为空”,则条件将返回“假”或“未知”,在这种情况下,后者与前者相同。那么,再说一遍,为什么不能在 Oracle 中使用呢? -
@Andriy:我认为问题在于,在 Oracle 中,
column <> ''将被评估为column <> NULL,因此'some text' <> ''将被评估为'some text' <> NULL=NULL(或Unknown正如你所说的那样)。我想有人会希望它产生 True 而不是 Unknown。 -
@ypercube:我现在明白了。一直以来,我都在想
column并错过了''作为<>的正确部分。是的,现在一切都清楚了,谢谢!我的意思是,虽然你只是这么认为,但这与实际发生的情况非常相似。
标签: sql sql-server oracle