1

char(255) に設定されたデータベースの列があります (はい、CHAR です。なぜデータベースがどのように設定されたかは聞かないでください) 現在、2 つのスペースを含む空の文字列 (つまり " ") があります。を使用NULLIF(LTRIM(RTRIM(column_name)), '')しても機能しません (出力は[2 つの空のスペース] です)。ただし、使用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 に答える