DATALENGTH() 或 ISNULL() 检索不为 null 且不为空的字段

Ben*_*rey 1 sql sql-server

很简单,以下哪种方法更适合在WHERE子句中检索FIELD_NAMENOT NULLNOT Empty的记录

WHERE DATALENGTH(FIELD_NAME) > 0
Run Code Online (Sandbox Code Playgroud)

或者

WHERE ISNULL(FIELD_NAME, '') <> ''
Run Code Online (Sandbox Code Playgroud)

更新

我被告知第一种方法会为某些类型的字段提供虚假结果......同意吗?

小智 5

首先,

select *
from table
where column <> ''
Run Code Online (Sandbox Code Playgroud)

将给出完全相同的结果

select *
from table
where isnull(column, '') <> ''
Run Code Online (Sandbox Code Playgroud)

因为条件为UNKNOWN而不是的记录FALSE仍会被过滤掉。我通常会选择第一个选项。

DATALENGTH计算尾随空格,而与 的比较''则不计算尾随空格。是否要 ' '与 进行比较取决于您''。如果你这样做,你需要DATALENGTH. 如果不这样做,只需与 进行比较即可''

请注意,对于TEXT/NTEXT类型,不支持比较,但DATALENGTH支持。