Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server RTRIM(LTRIM([City])不剥离空白_Sql_Sql Server_Special Characters_Whitespace_Trim - Fatal编程技术网

SQL Server RTRIM(LTRIM([City])不剥离空白

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

在对存储过程进行故障排除后,我意识到字段有一个额外字符,我假定为空白或某些特殊字符不可见。例如,city字段包含长度(LEN([city])为10的值'Abbeville'。我想我可以用以下内容修剪空白:

  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    ]" |
+-------+----------------+