sql - sql server 中的 LTRIM(RTRIM(COLUMN))

标签 sql sql-server tsql

我需要创建一个查询来收集列 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(A.EXP_GRAD_TERM)) is not null

完全等同于:

A.EXP_GRAD_TERM is not null

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

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

关于sql - sql server 中的 LTRIM(RTRIM(COLUMN)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54832061/

相关文章:

tsql - 如何获取第一列不为空

sql-server - 如何在 T-SQL 中使用带有变量的 LIKE 和 CONCAT()

sql-server - 具有外键的快照表与具有实际值的快照表

mysql - SQL-使用一个元组中的值从另一个元组中获取值

sql-server - 允许 Access 数据库与 SQL Server 数据库进行限制对话

sql-server - SSIS 到 SQL Server 的平面文件数据类型问题

SQL Server IF NOT EXISTS 用法?

c# - 以编程方式更改 Select 中的属性在 LINQ to SQL 查询中的填充方式

sql - Postgres 分区 - 性能问题

mysql - 如何选择重复项以获得正确的结果?