[英]LTRIM(RTRIM(COLUMN)) in sql server
我需要创建一个查询来收集列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条记录。 它们的行包含值,行包含空格。 我甚至转换列,列只有空格或值,而不是其他奇怪的隐形字符。
我不知道为什么。 我认为他们应该以同样的方式工作。
有什么想法吗?
LTRIM()函数:
删除前导空格后返回字符表达式。
RTRIM()函数:
截断所有尾随空格后返回一个字符串。
它们与IsNull或空字符串条件不同(CASE WHEN IS NULL OR <>'')
参考
这个表达式:
LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null
完全等同于:
A.EXP_GRAD_TERM is not null
空字符串与NULL
不同,因此删除空格 - 即使是只有空格的字符串 - 也不会影响NULL
比较。
如果您感到困惑,也许您有使用Oracle的经验,其中空字符串和NULL
是相同的。 这是Oracle的一个特殊属性。
将COALESCE()
与LTRIM()
和RTRIM()
:
AND RTRIM(LTRIM(COALESCE(A.EXP_GRAD_TERM, ''))) <> ''
COALESCE(A.EXP_GRAD_TERM, '')
将为每个null
值返回''
。
看看你是否想要获得非空且非空的值,你可以使用isnull(exp,replace_value)
AND RTRIM(LTRIM(ISNULL(A.EXP_GRAD_TERM, ''))) <> ''
isnull
isnull替换要替换它的空值。 你也可以使用COALESCE
“返回你的参数中的第一个非null表达式”
COALESCE
优于ISNULL
一个明显优势是它支持两个以上的输入,而ISNULL只支持两个。 COALESCE的另一个优点是它是一个标准函数(即由ISO / ANSI SQL标准定义),而ISNULL是特定于T-SQL的。 这两个函数之间的这些差异非常简单。
如果您想了解有关ISNULL和COALESCE之间差异的更多信息,您可以在此链接上看到它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.