我正在尝试从SQL中的字符串中删除空格,但LTRIM
和RTRIM
函数似乎不起作用?
柱:
[ProductAlternateKey] [nvarchar](25) COLLATE Latin1_General_CS_AS NULL
查询:
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%'
结果:
| COLUMN_0 | COLUMN_1 | LRTrim | LRLen | ASCIIR | ASCIIL | PRODUCTALTERNATEKEY |
---------------------------------------------------------------------------------
| 46783815 | 8 | 46783815| 8| 53 | 52 | 46783815 |
| 46783815 | 10|46783815 | 10| 10 | 52 | 46783815 |
如果LTRIM
和RTRIM
无效,可以是其他符号,例如“Enter”吗?
答案 0 :(得分:67)
使用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), '')))
如果您遇到上述无法删除的“空格”字符,请尝试以下一项或全部内容:
--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),'');
此潜在空格字符列表可用于创建如下函数:
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
然后您可以按如下方式使用:
Select
dbo.CleanAndTrimString(ProductAlternateKey) As ProductAlternateKey
from DimProducts
答案 1 :(得分:4)
在这种情况下,它不是前缀/后缀中的空格 第一行看起来不错。对第2行的内容执行以下操作。
ASCII(RIGHT(ProductAlternateKey, 1))
和
ASCII(LEFT(ProductAlternateKey, 1))
答案 2 :(得分:3)
文字后可能有2个空格,请确认。您也可以使用LTRIM
和RTRIM
功能吗?
LTRIM(RTRIM(ProductAlternateKey))
也许额外的空间不是普通的空间(ASCII 32,软空间)? 也许它们是“硬空间”,ASCII 160?
ltrim(rtrim(replace(ProductAlternateKey, char(160), char(32))))
答案 3 :(得分:0)
这个怎么样?
CASE WHEN ProductAlternateKey is NOT NULL THEN
CONVERT(NVARCHAR(25), LTRIM(RTRIM(ProductAlternateKey)))
FROM DimProducts
where ProductAlternateKey like '46783815%'
答案 4 :(得分:0)
看起来像隐形字符 -
ALT+255
试试这个
select REPLACE(ProductAlternateKey, ' ', '@')
--type ALT+255 instead of space for the second expression in REPLACE
from DimProducts
where ProductAlternateKey like '46783815%'
拉吉
编辑:根据ASCII()结果,尝试ALT+10
- 使用数字小键盘
答案 5 :(得分:-3)
删除包含SQL列数据的新行字符
Update a set a.CityName=Rtrim(Ltrim(REPLACE(REPLACE(a.CityName,CHAR(10),' '),CHAR(13),' ')))
,a.postalZone=Rtrim(Ltrim(REPLACE(REPLACE(a.postalZone,CHAR(10),' '),CHAR(13),' ')))
From tAddress a
inner Join tEmployees p on a.AddressId =p.addressId
Where p.MigratedID is not null and p.AddressId is not null AND
(REPLACE(REPLACE(a.postalZone,CHAR(10),'Y'),CHAR(13),'X') Like 'Y%' OR REPLACE(REPLACE(a.CityName,CHAR(10),'Y'),CHAR(13),'X') Like 'Y%')