sql - SQL - 如何从字符串中删除空格字符
问题描述
我有一个表,其中列(varchar)的最大长度为 12,有人用空格加载了一些值,所以不是“SPACE”而是“SPACE”
我想使用脚本删除空格,我很肯定 RTRIM 或 REPLACE(myValue, ' ', '') 会起作用,但 LEN(myValue) 显示还有额外的字符?
解决方案
正如几个人所提到的,它可能不是一个空间。获取 ngrams8k的副本,然后使用它来识别问题。例如,这里有文本“SPACE”,前面有空格,后面有 CHAR(160)(HTML BR 标记)。CHAR(160) 看起来像 SSMS 中的空格,但不是“可修剪的”。例如考虑这个查询:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);
SELECT '"'+@string+'"'
使用ngrams8k你可以这样做:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);
SELECT
ng.position,
ng.token,
asciival = ASCII(ng.token)
FROM dbo.ngrams8k(@string,1) AS ng;
回报:
position token asciival
---------- ------- -----------
1 32
2 S 83
3 P 80
4 A 65
5 C 67
6 E 69
7 160
如您所见,第一个字符(位置 1)是 CHAR(32),这是一个空格。最后一个字符(第 7 位)不是空格。知道 CHAR(160) 是问题,您可以像这样修复它:
SET @string = REPLACE(LTRIM(@string),CHAR(160),'')
如果您使用的是 SQL Server 2017+,您还可以使用TRIM
which 不仅仅是 LTRIM-and-RTRIM-ing。例如,这将删除前导和尾随制表符、空格、回车、换行和 HTML BR 标记。
SET @string = SELECT TRIM(CHAR(32)+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160) FROM @string)
推荐阅读
- c - 除了链接当前代码的目标文件和其他包含的头文件之外,其他任务链接器做什么?
- laravel - 在 Laravel 中避免 gstatic 的任何干净方法?
- python - 在 Python Paramiko 中执行 passwd 命令以更改 Linux 服务器上的密码
- azure - Azure WebApps + Azure File 与多容器共享
- python - 转发新会话时出错找不到:尝试使用远程 Webdriver 在 Python 中运行 Selenium Grid 时的功能
- javascript - 使用 Django 设置 React.js 失败
- ansible - 违规行似乎在 ansible
- javascript - 在下一个 js 中的单击处理程序函数中未正确检查状态
- rust - aes_gcm_siv 32 字节密钥要求的解决方法?
- git - Jenkins 无法连接到 Git 存储库“执行 git 命令时出错:git.exe ls-remote -h”