3

我需要创建一个查询来收集所有列A不为空且不为空的行。

当我使用这个时:

AND A.EXP_GRAD_TERM is not null AND A.EXP_GRAD_TERM <> ' '

我得到了 1169 条记录,它们都有一些字段值。

但是当我使用这个时:

AND LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null

我有 1932 条记录。它们有带值的行和带空格的行。我什至转换了列,该列只有空格或值,而不是其他奇怪的不可见字符。

我不知道为什么。我认为他们应该以同样的方式工作。

有什么想法吗?

4

4 回答 4

2

LTRIM() 函数:

删除前导空格后返回字符表达式。

RTRIM() 函数:

截断所有尾随空格后返回一个字符串。

它们不同于 IsNull 或空字符串条件(CASE WHEN IS NULL OR <>'')

参考

于 2019-02-22T17:18:52.653 回答
2

这个表达式:

 LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null

完全等同于:

A.EXP_GRAD_TERM is not null

空字符串与 不同NULL,因此删除空格——即使是从只有空格的字符串中——对NULL比较没有影响。

如果您感到困惑,也许您有使用 Oracle 的经验,其中空字符串和空字符串NULL是一回事。这是 Oracle 的一个特殊属性。

于 2019-02-22T17:20:15.340 回答
0

结合和:COALESCE()_LTRIM()RTRIM()

AND RTRIM(LTRIM(COALESCE(A.EXP_GRAD_TERM, ''))) <> ''

COALESCE(A.EXP_GRAD_TERM, '')将返回''每个null值。

于 2019-02-22T17:20:00.357 回答
0

看看是否要获取不为空且不为空的值可以使用 isnull (exp, replace_value)

AND RTRIM(LTRIM(ISNULL(A.EXP_GRAD_TERM, ''))) <> ''

isnullisnull 替换要替换的空值。您还可以使用COALESCEwhich “返回参数中的第一个非空表达式”

一个明显的优势COALESCEISNULL它支持两个以上的输入,而 ISNULL 只支持两个。COALESCE 的另一个优点是它是一个标准函数(即由 ISO/ANSI SQL 标准定义),而 ISNULL 是特定于 T-SQL 的。这两个函数之间的这些差异相当简单。

如果您想了解有关 ISNULL 和 COALESCE 之间差异的更多信息,可以在此链接上查看

于 2019-02-22T17:30:10.533 回答