从sql server中的字符串末尾删除所有空格

时间:2021-07-19 14:22:18

标签: sql sql-server

我有一个字符串,例如:'test 123 Add '。我想从字符串中删除最后 2 个空格,空格计数是动态的。 RTRIM() 函数不适用于我的情况。我正在使用以下查询,但它只删除了最后一个静态值。

Left(mycolumndata,len(mycolumndata)-1)

请建议我最好的解决方案。

2 个答案:

答案 0 :(得分:0)

这个问题很可能是因为您的尾随空格包括空格以外的内容。最常见的罪魁祸首是制表符 (CHAR(9)),例如中断 CHAR(10) 和 CHAR(13)。使用 Ngrams8K 可以轻松识别问题;考虑这个例子:

DECLARE 
  @string VARCHAR(100) = 'test 123 Add
      '

我包括一个选项卡、几个空格等等。使用 Ngrams8k 我们可以做到这一点:

SELECT ng.Position, ng.Token, [ascii] = ASCII(ng.Token)
FROM   dbo.ngrams8k(@string,1) AS ng;

退货:

enter image description here

这里我们可以使用 TRIM

关于修剪最重要的事情是它不是RTRIM(LTRIM( !!! TRIM 功能强大,旨在处理的不仅仅是空格;请注意文档中的此示例:

enter image description here

此示例中的罪魁祸首是 CHAR(9) 的 (10) 和 (13)。有了这些知识,我们就可以像这样使用 TRIM。

DECLARE 
  @string VARCHAR(100) = 'test 123 Add
      ',
  @trim VARCHAR(10) = CHAR(9)+CHAR(10)+CHAR(13)+CHAR(32);

SELECT TRIM(@trim FROM  @string) AS Result;

如果您不在 2019 年,您可以随时执行此操作:

SELECT 
  SUBSTRING(@string,1,
    DATALENGTH(@string) - PATINDEX('%[A-Z]%',REVERSE(@String))+1);

答案 1 :(得分:0)

使用 notepad++EmEditor 之类的文本编辑器,您可以复制/粘贴遇到问题的数据,打开 show all characters,并准确找出这些字符是什么所以你可以在你的代码中解释它们。正如 Alan 上面所说,通常的嫌疑人是 CHAR(10)CHAR(13) (CR/LF)。 -D