2008-12-08 45 views
6

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

我已经试过

IF @value = ''if @value = NULL并没有一个捕捉空值。有没有什么方法来测试一个varchar是否完全是空白?

AHA!原来我正在测试null是否有错误。谢谢。

回答

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; 
+0

或SET ANSI NULLS OFF - 我宁愿遵循SQL-92规范tho'和IS IS NULL – stephbu 2008-12-08 18:37:00

+1

可能缺少某些东西,但这并不能纠正测试空白的方式。它纠正了检查null的语法,但这不是问题的要求。 – 2013-08-26 16:06:51

3

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

+0

只有在测量值输入时,不需要空白时才需要修剪。否则len()会捕获这一切。 – ProfK 2013-04-03 09:40:05

3

(LTRIM(RTRIM(@Value))= '' 应该做的伎俩。

0

你可能有多个空格(”“)领域,所以如果你修剪,你会得到更好的结果是:

where ltrim(yourcolumnname) = '' 
10
ltrim(rtrim(isNull(@value,''))) = '' 
2

,其中长度(RTRIM(LTRIM(yourcolumnname)))= 0或yourcolumnname是空

1

我只是做了一些测试,并发现了一些有趣的事情。 我以前写我的查询,像这样:

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

但是,你实际上并不需要检查空,所有你需要做的是检查修整值后的长度。

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

这个选择除了空白以及任何只有空白的列。

事实证明,你并不需要,因为SQL Server会忽略尾随空白修剪的价值,所以你真的需要它这样的: SELECT * FROM TableA的 WHERE LEN(VAL)> 0

2

然后,您可以使用LTRIMRTRIM执行过多的字符串操作,只需在表达式中搜索第一个“非空格”即可。

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0