我有一个数据库列设置为char(255)(是的,CHAR。不要问我为什么这是数据库的设置),目前有一个带有两个空格的空字符串(即“”)。使用NULLIF(LTRIM(RTRIM(column_name)), '')
不起作用(输出为 [两个空格])。但是,使用
NULLIF(' ', '')
正常工作,输出为NULL
。换句话说,实际列值正常工作,而传递列名称则返回不正确的值。
有关于此的任何想法吗?
答案 0 :(得分: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
它应该告诉你那里有哪些其他角色,以及在哪里。