sql server中的LTRIM(RTRIM(COLUMN))

时间:2019-02-22 17:14:11

标签: sql sql-server tsql

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

当我使用这个时:

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 个答案:

答案 0 :(得分:2)

LTRIM()函数:

  

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

RTRIM()函数:

  

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

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

参考

答案 1 :(得分:2)

此表达式:

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

完全等同于:

A.EXP_GRAD_TERM is not null

空字符串与NULL不同,因此,即使从仅包含空格的字符串中删除空格,也不会影响NULL比较。

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

答案 2 :(得分:0)

COALESCE()LTRIM()组合RTRIM()

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

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

答案 3 :(得分:0)

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

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

isnull isull替换您要替换的空值。您还可以使用COALESCE,它“返回参数中的第一个非空表达式”

COALESCE优于ISNULL的一个明显优势是它支持两个以上的输入,而ISNULL仅支持两个。 COALESCE的另一个优点是它是一个标准函数(即由ISO / ANSI SQL标准定义),而ISNULL是T-SQL特定的。这两个功能之间的这些区别非常简单。

如果您想进一步了解ISNULL和COALESCE之间的区别,可以在this link上查看它