我的表中有一些空白值,我似乎无法在IF语句中捕获它们。SQL Server中的空白测试
我已经试过
IF @value = ''
和if @value = NULL
并没有一个捕捉空值。有没有什么方法来测试一个varchar是否完全是空白?
AHA!原来我正在测试null是否有错误。谢谢。
我的表中有一些空白值,我似乎无法在IF语句中捕获它们。SQL Server中的空白测试
我已经试过
IF @value = ''
和if @value = NULL
并没有一个捕捉空值。有没有什么方法来测试一个varchar是否完全是空白?
AHA!原来我正在测试null是否有错误。谢谢。
要使用NULL比较,使用IS 。NULL关键字
--Generic example:
SELECT *
FROM MY_TABLE
WHERE SOME_FIELD IS NULL;
--Instead of
SELECT *
FROM MY_TABLE
WHERE SOME_FIELD = NULL;
(LTRIM(RTRIM(@Value))= '' 应该做的伎俩。
你可能有多个空格(”“)领域,所以如果你修剪,你会得到更好的结果是:
where ltrim(yourcolumnname) = ''
ltrim(rtrim(isNull(@value,''))) = ''
,其中长度(RTRIM(LTRIM(yourcolumnname)))= 0或yourcolumnname是空
我只是做了一些测试,并发现了一些有趣的事情。 我以前写我的查询,像这样:
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
然后,您可以使用LTRIM
和RTRIM
执行过多的字符串操作,只需在表达式中搜索第一个“非空格”即可。
SELECT
*
FROM
[Table]
WHERE
COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0
或SET ANSI NULLS OFF - 我宁愿遵循SQL-92规范tho'和IS IS NULL – stephbu 2008-12-08 18:37:00
可能缺少某些东西,但这并不能纠正测试空白的方式。它纠正了检查null的语法,但这不是问题的要求。 – 2013-08-26 16:06:51