2017-11-14 2 views
0

Ich habe einige Feldwerte, die 5 Leerzeichen als Trennzeichen enthalten, z.Ersetzen Sie mehrere Leerzeichen mit Zeichen während SELECT

AWERDC 123

ich einen wöchentlichen Extrakt, der an einen externen Teilnehmer eingereicht endet werden, aber jeder dieser besonderen Werte brauchen eine ‚#‘ wechselt haben (AWERDC#123). Ich bin auf der Suche nach dem besten Weg, die Transformation während der SELECT zu tun.

Was kann ich tun?

+1

Ist es immer genau 5 Leerzeichen, oder sind es bis zu 5 Leerzeichen? Welches DBMS benutzt du? –

+0

Die Antwort ist DBMS-abhängig, zum Beispiel in TSQL können Sie 'replace' verwenden – jean

Antwort

1

Wenn Sie SQL Server verwenden, und wenn es immer fünf Räume sind, können Sie replace(), wie in diesem Beispiel verwenden:

declare @s varchar(100) = 'AWERDC  123' 

select replace(@s, '  ', '#') 

Welche zurück:

AWERDC#123 

Wenn es eine Variable sind Anzahl der Leerzeichen, dann können Sie das mit stuff(), charindex() und patindex() umgehen. Dieses Beispiel hängt von den Zeichen vor der variablen Anzahl der Leerzeichen ab, die Buchstaben sein sollen, und den Zeichen nach den Leerzeichen als Zahlen. Wenn Ihre Daten anders sind, müssen Sie die patindex() entsprechend ändern.

declare @s varchar(100) = 'AWERDC  123' 

select stuff(@s, charindex(' ', @s, 1), patindex('%[0-9]%', @s) - charindex(' ', @s, 1), '#') 

die immer AWERDC#123 zurückgibt, unabhängig davon, wie viele Räume gibt.

Hier ist ein verbesserter Ansatz, der egal ist, welche Art von Zeichen in den führenden und nachfolgenden Zeichen sind. Es funktioniert einfach mit einer variablen Anzahl von Leerzeichen, weil es nach dem ersten Leerzeichen vorwärts sucht, dann das erste Leerzeichen rückwärts (in der Zeichenfolge), führt die Mathematik, dann fügt ein # anstelle aller Leerzeichen stuff():

declare @s varchar(100) = 'AWERDC    123' 

select stuff(@s, charindex(' ', @s, 1), len(@s) - charindex(' ', reverse(@s), 1) - charindex(' ', @s, 1) + 2, '#') 
0

Sie können mit einem einfachen ersetzen in Ihrer Abfrage versuchen.

SELECT REPLACE([Column], '  ','#') From [dbo.Table] 
Verwandte Themen