7

我的表中有一些空白值,我似乎无法在 IF 语句中捕获它们。

我试过了

IF @value = ''并且if @value = NULL没有一个人能捕捉到空白值。有什么方法可以测试 varchar 是否完全是空格?

啊哈!原来我正在测试 null 错误。谢谢。

4

8 回答 8

13
ltrim(rtrim(isNull(@value,''))) = ''
于 2008-12-08T18:47:34.843 回答
8

要与 NULL 进行比较,请使用 IS NULL 关键字。

--Generic example:
SELECT *
FROM MY_TABLE
WHERE SOME_FIELD IS NULL;

--Instead of    

SELECT *
FROM MY_TABLE
WHERE SOME_FIELD = NULL;
于 2008-12-08T18:35:36.067 回答
3

如果长度(@value)= 0 或@value 为空

于 2008-12-08T18:32:58.383 回答
3
(LTRIM(RTRIM(@Value))=''

应该做的伎俩。

于 2008-12-08T18:33:59.940 回答
2

其中 length(rtrim(ltrim(yourcolumnname))) = 0 或 yourcolumnname 为空

于 2008-12-09T15:23:13.600 回答
2

我只是做了一些测试,发现了一些有趣的东西。我曾经这样写我的查询:

SELECT *
FROM TableA
WHERE Val IS NOT NULL
AND LEN(RTRIM(LTRIM(Val))) > 0

但是,您实际上不需要检查 null,您需要做的就是在修剪值后检查长度。

SELECT *
FROM TableA
WHERE LEN(RTRIM(LTRIM(Val))) > 0

此选择会清除空值以及仅包含空格的任何列。

事实证明,您不需要修剪该值,因为 SQL Server 忽略尾随空格,所以您实际上需要它:SELECT * FROM TableA WHERE LEN(Val) > 0

于 2013-05-08T23:50:54.073 回答
2

LTRIM与其使用AND执行过多的字符串操作RTRIM,不如在表达式中搜索第一个“非空格”。

SELECT
            *
    FROM
            [Table]
    WHERE
            COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0
于 2014-10-20T09:42:02.170 回答
0

您可能有多个空格 (' ') 的字段,因此如果您修剪它,您将获得更好的结果:

where ltrim(yourcolumnname) = ''
于 2008-12-08T18:37:22.680 回答