Как удалить символы пробела из строки в SQL Server
Я пытаюсь удалить пробелы из строки в SQL, но функции LTRIM
и RTRIM
не работают?
Колонка:
[ProductAlternateKey] [nvarchar](25) COLLATE Latin1_General_CS_AS NULL
Query:
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"?
Ответы
Ответ 1
Используя 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
Ответ 2
В этом случае это не пространство, которое находится в префиксе/суффиксе.
Первая строка выглядит нормально. Для содержимого второй строки сделайте следующее.
ASCII(RIGHT(ProductAlternateKey, 1))
и
ASCII(LEFT(ProductAlternateKey, 1))
Ответ 3
После текста может быть 2 пробела, пожалуйста, подтвердите. Вы можете также использовать функции LTRIM
и RTRIM
?
LTRIM(RTRIM(ProductAlternateKey))
Возможно, дополнительное пространство не является обычным пространством (ASCII 32, мягкое пространство)?
Может быть, они "жесткие", ASCII 160?
ltrim(rtrim(replace(ProductAlternateKey, char(160), char(32))))
Ответ 4
Как насчет этого?
CASE WHEN ProductAlternateKey is NOT NULL THEN
CONVERT(NVARCHAR(25), LTRIM(RTRIM(ProductAlternateKey)))
FROM DimProducts
where ProductAlternateKey like '46783815%'
Ответ 5
Похож на невидимый персонаж -
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
- использовать цифровую клавиатуру
Ответ 6
Удалить новые строковые символы с данными столбца 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%')