SQL Server RTRIM(LTRIM([City])不剥离空白
在对存储过程进行故障排除后,我意识到字段有一个额外字符,我假定为空白或某些特殊字符不可见。例如,city字段包含长度(LEN([city])为10的值'Abbeville'。我想我可以用以下内容修剪空白:SQL Server RTRIM(LTRIM([City])不剥离空白,sql,sql-server,special-characters,whitespace,trim,Sql,Sql Server,Special Characters,Whitespace,Trim,在对存储过程进行故障排除后,我意识到字段有一个额外字符,我假定为空白或某些特殊字符不可见。例如,city字段包含长度(LEN([city])为10的值'Abbeville'。我想我可以用以下内容修剪空白: UPDATE US_City_State SET [City] = RTRIM(LTRIM([City])) 这不起作用。我强制转换为varbinary,但我不知道从这里做什么。该列被定义为nvarchar。这是强制转换值 0x4100620062006500760069006C
UPDATE US_City_State
SET [City] = RTRIM(LTRIM([City]))
这不起作用。我强制转换为varbinary,但我不知道从这里做什么。该列被定义为nvarchar。这是强制转换值
0x4100620062006500760069006C006C006500A000
[更新]样本数据
City City_Hex_Value
Aaronsburg 0x4100610072006F006E0073006200750072006700A000
Abbeville 0x4100620062006500760069006C006C006500A000
谢谢!也许空格不仅仅是一个空格: 试试这个:
UPDATE US_City_State
SET [City] = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE([City], CHAR(10), ''), CHAR(13), ''), CHAR(9), ''), CHAR(160), '')))
说明: 有些空白不是真正的空白(“”)。以下是一些空白:
CHAR(9) = Horizontal Tab
CHAR(10) = Line Feed
CHAR(13) = Carriage Return
CHAR(160) = Non-Breaking Space
我所做的是删除上面的空白。您可以用空格(“”)或
CHAR(32)
,这取决于您想要如何处理它们。TRIM
所有空格选项卡和输入:
DECLARE @Str VARCHAR(MAX) = '
[ Foo ]
'
DECLARE @NewStr VARCHAR(MAX) = ''
DECLARE @WhiteChars VARCHAR(4) =
CHAR(13) + CHAR(10) -- ENTER
+ CHAR(9) -- TAB
+ ' ' -- SPACE
;WITH Split(Chr, Pos) AS (
SELECT
SUBSTRING(@Str, 1, 1) AS Chr
, 1 AS Pos
UNION ALL
SELECT
SUBSTRING(@Str, Pos, 1) AS Chr
, Pos + 1 AS Pos
FROM Split
WHERE Pos <= LEN(@Str)
)
SELECT @NewStr = @NewStr + Chr
FROM Split
WHERE
Pos >= (
SELECT MIN(Pos)
FROM Split
WHERE CHARINDEX(Chr, @WhiteChars) = 0
)
AND Pos <= (
SELECT MAX(Pos)
FROM Split
WHERE CHARINDEX(Chr, @WhiteChars) = 0
)
SELECT '"' + @NewStr + '"'
结果
+-------+----------------+
| Test | Result |
+-------+----------------+
| EMPTY | "" |
| EMTPY | "" |
| NULL | NULL |
| Str | "[ Foo ]" |
+-------+----------------+
源:Len
函数返回指定字符串表达式的字符数,不包括尾随空格。因此,在之前和之后,长度将相同trimmingYes,因此在更新之后,字段的长度应为9,但仍然为10@nodisplayname可以显示一些示例数据,可以使用anoth进行修剪呃整理好了吗?成功了!谢谢@wewethemenance@WillLopez很高兴我能提供帮助。请注意,并不是所有的空白字符都包括在内。@wewesthemenace您能演示一下吗,我不明白您为什么使用replacement谢谢@wewesthemenace,注意到。但我需要的是:-)
-- Test
DECLARE @Str VARCHAR(MAX) = '
[ Foo ]
'
SELECT 'Str', '"' + dbo.StrTrim(@Str) + '"'
UNION SELECT 'EMPTY', '"' + dbo.StrTrim('') + '"'
UNION SELECT 'EMTPY', '"' + dbo.StrTrim(' ') + '"'
UNION SELECT 'NULL', '"' + dbo.StrTrim(NULL) + '"'
+-------+----------------+
| Test | Result |
+-------+----------------+
| EMPTY | "" |
| EMTPY | "" |
| NULL | NULL |
| Str | "[ Foo ]" |
+-------+----------------+