1

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

对此有什么想法吗?

4

1 回答 1

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

它应该告诉你那里还有哪些其他角色,以及在哪里。

于 2013-04-22T18:21:27.487 回答