2013-04-22 47 views
1

我有一个数据库列设置为char(255)(是,CHAR。不要问我为什么这是如何设置数据库)目前有一个空的字符串和两个空格(即“”)。使用NULLIF(LTRIM(RTRIM(column_name)), '')不起作用(输出为 [两个空白空间])。但是,使用NULLIF(' ', '')可正常工作,输出为NULL。换句话说,实际的列值工作正常,而传递列的名称会返回不正确的值。NULLIF空字符串检查返回空字符串与列名称,但与列值NULL NULL

对此的任何想法?

+1

适用于我的作品:http://www.sqlfiddle.com/#!3/34e49/1 – mellamokb 2013-04-22 17:55:01

+0

原因是因为您没有将可打印的字符放入列中。请参阅http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=164618 – danihp 2013-04-22 18:02:40

+0

您确定它们是“char”而不是“nchar”吗? – 2013-04-22 18:51:58

回答

3

我相信这个列必须有更多的空间。例如:

CREATE TABLE #x(id INT, y CHAR(255)); 

INSERT #X SELECT 1, ' ' 
UNION ALL SELECT 2, ' ' 
UNION ALL SELECT 3, ' ' + CHAR(9); 

SELECT id, NULLIF(LTRIM(RTRIM(y)),'') FROM #x; 

结果:

1 NULL 
2 NULL 
3 

对于排在那里失败了,试试这个:

DECLARE @s CHAR(255); 
SELECT @s = y FROM #x WHERE id = 3; 

DECLARE @i INT; 
SET @i = 1; 
WHILE @i <= DATALENGTH(@s) 
BEGIN 
    IF ASCII(SUBSTRING(@s, @i, 1)) <> 32 
    BEGIN 
    PRINT 'Position ' + RTRIM(@i) + ' = CHAR(' 
      + RTRIM(ASCII(SUBSTRING(@s, @i, 1))) + ')'; 
    END 
    SET @i = @i + 1; 
END 

应该告诉你其他角色都在那里,并在那里。