it-swarm.com.de

Entfernen von Leerzeichen aus einer Zeichenfolge in SQL Server

Ich versuche, Leerzeichen aus einer Zeichenfolge in SQL zu entfernen, aber LTRIM- und RTRIM-Funktionen scheinen nicht zu funktionieren?

Säule:

[ProductAlternateKey] [nvarchar](25) COLLATE Latin1_General_CS_AS NULL

Abfrage:

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%'

Ergebnis:

|  COLUMN_0 | COLUMN_1 | LRTrim | LRLen | ASCIIR | ASCIIL | PRODUCTALTERNATEKEY |
---------------------------------------------------------------------------------
|  46783815 |        8 | 46783815|     8|   53   |   52   |            46783815 |
| 46783815  |        10|46783815  |   10|   10   |   52   |           46783815  |

Kann es andere Symbole geben, wenn LTRIM und RTRIM nicht funktionieren, wie "Enter"?

27
Justin

Mit ASCII(RIGHT(ProductAlternateKey, 1)) können Sie sehen, dass das rechte Zeichen in Zeile 2 ein Zeilenvorschub oder ein ASCII-Zeichen 10 ist.

Diese können nicht mit den Standardfunktionen LTrimRTrim entfernt werden.

Sie können jedoch (REPLACE(ProductAlternateKey, CHAR(10), '') verwenden.

Möglicherweise möchten Sie auch Rückgaben und Registerkarten berücksichtigen. Diese drei (Zeilenvorschub, Wagenrücklauf und Registerkarten) sind die üblichen Schuldigen und können folgendermaßen entfernt werden:

LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(ProductAlternateKey, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')))

Wenn Sie auf weitere Leerzeichen stoßen, die mit den obigen Angaben nicht entfernt werden können, versuchen Sie es mit einem oder allen der folgenden Zeichen:

--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),'');

Diese Liste möglicher Leerzeichen kann zum Erstellen einer Funktion verwendet werden, z.

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

Das könntest du dann wie folgt verwenden:

Select 
    dbo.CleanAndTrimString(ProductAlternateKey) As ProductAlternateKey
from DimProducts
63
DMK

In diesem Fall steht kein Leerzeichen im Präfix/Suffix.
Die 1. Reihe sieht OK aus. Gehen Sie für den Inhalt der 2. Zeile wie folgt vor.

ASCII(RIGHT(ProductAlternateKey, 1))

und 

ASCII(LEFT(ProductAlternateKey, 1))
4
shahkalpesh

Nach dem Text können 2 Leerzeichen stehen. Bestätigen Sie dies bitte. Sie können die Funktionen LTRIM und RTRIM auch verwenden, oder?

LTRIM(RTRIM(ProductAlternateKey))

Vielleicht ist der zusätzliche Speicherplatz kein gewöhnlicher Speicherplatz (ASCII 32, weicher Speicherplatz)? Vielleicht sind sie "harter Speicher", ASCII 160?

ltrim(rtrim(replace(ProductAlternateKey, char(160), char(32))))
3
TechDo

Sieht aus wie der unsichtbare Charakter - 

ALT+255

Versuche dies

select REPLACE(ProductAlternateKey, ' ', '@')
--type ALT+255 instead of space for the second expression in REPLACE 
from DimProducts
where ProductAlternateKey  like '46783815%'

Raj

Bearbeiten: Basierend auf den ASCII () - Ergebnissen versuchen Sie ALT+10 - verwenden Sie die numerische Tastatur 

0
Raj

Wie wäre es damit?

CASE WHEN ProductAlternateKey is NOT NULL THEN
CONVERT(NVARCHAR(25), LTRIM(RTRIM(ProductAlternateKey))) 
FROM DimProducts
where ProductAlternateKey  like '46783815%'
0
mr_eclair