我有一个字符串,例如:'test 123 Add '
。我想从字符串中删除最后 2 个空格,空格计数是动态的。 RTRIM()
函数不适用于我的情况。我正在使用以下查询,但它只删除了最后一个静态值。
Left(mycolumndata,len(mycolumndata)-1)
请建议我最好的解决方案。
答案 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;
退货:
这里我们可以使用 TRIM。
关于修剪最重要的事情是它不是RTRIM(LTRIM(
!!!
TRIM 功能强大,旨在处理的不仅仅是空格;请注意文档中的此示例:
此示例中的罪魁祸首是 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