如何从SQL Server中的字符串中删除空格字符

Jus*_*tin 30 sql t-sql sql-server sql-server-2008-r2

我想从一个字符串中的SQL删除空格,但LTRIMRTRIM功能似乎并没有工作?

柱:

[ProductAlternateKey] [nvarchar](25) COLLATE Latin1_General_CS_AS NULL
Run Code Online (Sandbox Code Playgroud)

查询:

select REPLACE(ProductAlternateKey, ' ', '@'),
       LEN(ProductAlternateKey),
       LTRIM(RTRIM(ProductAlternateKey))      AS LRTrim,
       LEN(LTRIM(RTRIM(ProductAlternateKey))) AS LRLen,
       ASCII(RIGHT(ProductAlternateKey, 1))   AS ASCIIR,
       ASCII(LEFT(ProductAlternateKey, 1))    AS ASCIIL,
       ProductAlternateKey
from DimProducts
where ProductAlternateKey  like '46783815%'
Run Code Online (Sandbox Code Playgroud)

结果:

|  COLUMN_0 | COLUMN_1 | LRTrim | LRLen | ASCIIR | ASCIIL | PRODUCTALTERNATEKEY |
---------------------------------------------------------------------------------
|  46783815 |        8 | 46783815|     8|   53   |   52   |            46783815 |
| 46783815  |        10|46783815  |   10|   10   |   52   |           46783815  |
Run Code Online (Sandbox Code Playgroud)

可以是其他符号,如果LTRIMRTRIM不工作,如"回车"?

DMK*_*DMK 71

使用ASCII(RIGHT(ProductAlternateKey, 1))您可以看到第2行中最右边的字符是换行符或Ascii字符10.

无法使用标准中删除LTrim RTrim的功能.

但是你可以使用 (REPLACE(ProductAlternateKey, CHAR(10), '')

您可能还想考虑回车和标签.这三个(换行,回车和制表符)是常见的罪魁祸首,可以使用以下方法删除:

LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(ProductAlternateKey, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')))
Run Code Online (Sandbox Code Playgroud)

如果您遇到以上无法删除的任何"空格"字符,请尝试下面的一个或全部:

--NULL
Replace([YourString],CHAR(0),'');
--Horizontal Tab
Replace([YourString],CHAR(9),'');
--Line Feed
Replace([YourString],CHAR(10),'');
--Vertical Tab
Replace([YourString],CHAR(11),'');
--Form Feed
Replace([YourString],CHAR(12),'');
--Carriage Return
Replace([YourString],CHAR(13),'');
--Column Break
Replace([YourString],CHAR(14),'');
--Non-breaking space
Replace([YourString],CHAR(160),'');
Run Code Online (Sandbox Code Playgroud)

此潜在空白字符列表可用于创建以下功能:

Create Function [dbo].[CleanAndTrimString] 
(@MyString as varchar(Max))
Returns varchar(Max)
As
Begin
    --NULL
    Set @MyString = Replace(@MyString,CHAR(0),'');
    --Horizontal Tab
    Set @MyString = Replace(@MyString,CHAR(9),'');
    --Line Feed
    Set @MyString = Replace(@MyString,CHAR(10),'');
    --Vertical Tab
    Set @MyString = Replace(@MyString,CHAR(11),'');
    --Form Feed
    Set @MyString = Replace(@MyString,CHAR(12),'');
    --Carriage Return
    Set @MyString = Replace(@MyString,CHAR(13),'');
    --Column Break
    Set @MyString = Replace(@MyString,CHAR(14),'');
    --Non-breaking space
    Set @MyString = Replace(@MyString,CHAR(160),'');

    Set @MyString = LTRIM(RTRIM(@MyString));
    Return @MyString
End
Go
Run Code Online (Sandbox Code Playgroud)

然后你可以使用如下:

Select 
    dbo.CleanAndTrimString(ProductAlternateKey) As ProductAlternateKey
from DimProducts
Run Code Online (Sandbox Code Playgroud)