sql server中的LTRIM(RTRIM(列))
我需要创建一个查询来收集列sql server中的LTRIM(RTRIM(列)),sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要创建一个查询来收集列a不为null且不为空的所有行 当我使用这个时: AND A.EXP_GRAD_TERM is not null AND A.EXP_GRAD_TERM <> ' ' AND LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null 我有1932张唱片。它们有带值的行和带空格的行。我甚至转换了列,列只有空格或值,没有其他奇怪的不可见字符 我不知道为什么。我认为他们应该用同样的方法工作 有什么想法吗?LTRIM()函数: 在删除前
a
不为null且不为空的所有行
当我使用这个时:
AND A.EXP_GRAD_TERM is not null AND A.EXP_GRAD_TERM <> ' '
AND LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null
我有1932张唱片。它们有带值的行和带空格的行。我甚至转换了列,列只有空格或值,没有其他奇怪的不可见字符
我不知道为什么。我认为他们应该用同样的方法工作
有什么想法吗?LTRIM()函数:
在删除前导空格后返回字符表达式
RTRIM()函数:
在截断所有尾随空格后返回字符串
它们不同于IsNull或空字符串条件(如果为NULL或“”)
参考资料
COALESCE()
与LTRIM()
和RTRIM()
和RTRIM(LTRIM(聚合(A.EXP_GRAD_TERM.))”
COALESCE(A.EXP\u GRAD\u TERM')
将为每个null
值返回'
。此表达式:
LTRIM(RTRIM(A.EXP_GRAD_TERM)) is not null
完全等同于:
A.EXP_GRAD_TERM is not null
空字符串不同于NULL
,因此删除空格——即使是从只有空格的字符串中删除空格——对NULL
比较没有影响
如果您感到困惑,可能您有过Oracle的经验,其中空字符串和NULL
是同一回事。这是Oracle特有的属性。如果要获取非null和非空的值,可以使用isnull(exp,replace\u value)
和RTRIM(LTRIM(ISNULL(A.EXP\u GRAD\u TERM.))
isnull
isnull替换要替换的空值。您还可以使用COALESCE
,它“返回参数中的第一个非空表达式”
与ISNULL相比,COALESCE
有一个明显的优势,即它支持两个以上的输入,而ISNULL只支持两个。COALESCE的另一个优点是它是一个标准函数(即,由ISO/ANSI SQL标准定义),而ISNULL是特定于T-SQL的。这两个函数之间的区别相当简单
如果您想了解有关ISNULL和COALESCE之间差异的更多信息,可以在上看到,的结果是什么,并且LTRIM(RTRIM(A.EXP_GRAD_TERM))不为null,而A.EXP_GRAD_TERM''
763
行仅由空字符串或空格字符组成,这些字符不算作null
。顺便说一句,尾随空格在字符串比较中并不重要,因此'
和'
是相同的东西。您可以进一步“修剪”它,尾随空格在比较中被忽略,因此RTRIM
也不是必需的。@honey。LTRIM也不在这里。
A.EXP_GRAD_TERM is not null
AND RTRIM(LTRIM(ISNULL(A.EXP_GRAD_TERM, ''))) <> ''