Jus*_*tin 30 sql t-sql sql-server sql-server-2008-r2
我想从一个字符串中的SQL删除空格,但LTRIM
和RTRIM
功能似乎并没有工作?
柱:
[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)
可以是其他符号,如果LTRIM
和RTRIM
不工作,如"回车"?
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)