Подтвердить что ты не робот

Как удалить символы пробела из строки в 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"?

4b9b3361

Ответ 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%')