tsql - 如何在字符串中查找/替换奇怪的空格
问题描述
我在我的 sql 数据库字符串中发现了一个奇怪的空格,它不能像 REPLACE(string, ' ', '') RTRIM 那样被替换,甚至无法用 string = '% %' 找到它。当使用 SELECT string INTO 时,这个空间甚至会转移到新表如果我在管理工作室中选择这个字符串并复制这似乎是正常的空间,当一切正常但不能直接从数据库做任何事情时。我还可以做些什么?它是某种错误,或者我可以为此尝试一些特殊字符吗?
解决方案
首先,您必须确定角色。
您可以通过使用计数表(或 cte)和Unicode
函数来做到这一点:
以下脚本将返回一个包含两列的表:一列包含一个字符,另一列是 unicode 值:
DECLARE @Str nvarchar(100) = N'This is a string containing 1 number and some words.';
with Tally(n) as
(
SELECT TOP(LEN(@str)) ROW_NUMBER() OVER(ORDER BY @@SPID)
FROM sys.objects a
--CROSS JOIN sys.objects b -- (unremark if there are not enough rows in the tally cte)
)
SELECT SUBSTRING(@str, n, 1) As TheChar,
UNICODE(SUBSTRING(@str, n, 1)) As TheCode
FROM Tally
WHERE n <= LEN(@str)
您还可以在 where 子句中添加一个条件以仅包含“特殊”字符:
AND SUBSTRING(@str, n, 1) NOT LIKE '[a-zA-Z0-9]'
然后你可以使用它的unicode值替换它nchar
(我在这个例子中使用了32,因为它是unicode“常规”空间:
SELECT REPLACE(@str, NCHAR(32), '|')
结果:
This|is|a|string|containing|1|number|and|some|words.
推荐阅读
- spring - 发布 MultipartFile - 请求部分未预设错误
- r - `dplyr::if_else()` 与基本 R `ifelse()` 相比 - 为什么 rbindlist 错误?
- html - 引导轮播中的媒体查询
- javascript - 按下提交按钮时Javascript表单不返回结果
- flutter - 为什么 Flutter 在选项卡式界面中处理我的小部件状态对象?
- css - SVG元素在圆圈上旋转
- go - 如何在golang中使用杜松子酒服务两个静态站点?
- javascript - LitElement 如何监控子 dom 并更改样式
- python - 如何使用 Flask/Jinja2 连续渲染项目?
- php - 从 Android 手机获取 userAgent