2017-05-25 54 views
0

我有一个包含多个字段的SQL表。在任何文本字段中,在我感兴趣的字符串的右侧有重复的字符,如下所示:无法从SQL字符串中删除字符

'AAA .................. ........' - 不幸的是,堆叠溢出正在修改帖子中的字符(Ironic?),所以我用''替换了它们。尝试给人留下印象。

当我运行下面的SQL,隐藏人物显得空间:

SELECT ASCII(RIGHT(EXCHANGE, 1)) FROM T_TMP_INS -- Returns 32 

如果我运行以下命令:

SELECT REPLACE(FIELD, CHAR(32), '@') FROM TABLE1 

结果是:

AAA @@@@@@@@@@@@@@@@@@@@

所以,我认为我可以只使用一个更新删除空格字符这样:

UPDATE TABLE1 SET FIELD = REPLACE(FIELD, CHAR(32), '') 

但更新不什么那么更改字段。

是否有一个原因,我错过了为什么选择识别并替换错误的字符和更新声明不是?

感谢您的任何帮助。

+1

该列是如何定义的?我想它是CHAR或NCHAR而不是VARCHAR或NVARCHAR,它们没有长度信息并用空格填充内容。 – Lucero

回答

1

如果该字段被声明为例如char(10)然后它会总是包含10个字符,并在末尾添加空格以弥补较短的字符串。

如果你想声明能够存储字符串高达 10个字符长的列,但不希望在较短的值填充,它应该被声明为varchar(10)。 (同样,ncharnvarchar)。

(如果你无法改变列的声明,只是需要检索过程中解决它,那么你应该先CASTCONVERTvarchar/nvarchar形式和然后修剪与RTRIM结束)


您也可以尝试调整ANSI_PADDING设置以更改此行为。我建议不要这样做 - 这任何SQL数据库系统的标准行为,所以我建议使用它,而不是使用非标准的产品特定工作。

+0

这很有道理。直到这个响应,我才明白char和varchar之间的区别。刚刚放下我的桌子并用varchar重新创建它。加载的数据,现在看起来不错,谢谢! – ricky89

0

如果字符是空格,您可以使用RTRIM(FIELD)来修剪它们。

如果还有前导空格,则可以使用LTRIM(RTRIM(FIELD))

+0

与替换一样,RTRIM和LTRIM函数仅适用于SELECT。使用更新他们不再工作 – ricky89

+0

然后检查列的类型@Damien_The_Unbeliever提到。 – Kostis