2013-04-22 95 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 

應該告訴你其他角色都在那裏,並在那裏。