2016-06-20 8 views
1

SELECT a. [VORHANDEN], a. [Klasse] FROM [Legacy]. [Dbo]. [MyTables] als a;Regulärer Ausdruck mit der SQL-Abfrage

Above Abfrage gibt:

enter image description here

Können Sie mir sagen, wie a.[Class]210, und 211, aus der Abfrage Spalte entfernen?

Hinweis: Ich gab nur ein Beispiel.Ich brauche eine generische Lösung, die für alle Zeilen dieser a.[Class] Spalte gilt.

Hinweis 2: Format der Class Spalte ist wie folgt. numeric dann , danach string .Ich muss zuerst 2 Teile entfernen.Nötig, nur den string Teil zu behalten.

+0

'a SELECT [RAUM], SUBSTRING (a. [Klasse], 5, 100) FROM [Legacy]. [Dbo]. [MyTables] als eine; ' –

+0

ist Ihre Klasse Spalte spezifische Formatdaten ?? –

+0

@JaydipJ Ja, es ist wie diese 'numeric' dann', 'nach diesem' string' – Sampath

Antwort

2

Sie müssen hier nicht unbedingt einen regulären Ausdruck verwenden. Sie könnten versuchen, REPLACE mit:

SELECT a.[PREMISES], 
     REPLACE(REPLACE(a.[Class],'210, ',''),'211, ','') as [Class] 
FROM [Legacy].[dbo].[MyTables] as a; 

alle vor dem ersten , zu entfernen:

SELECT a.[PREMISES], 
     LTRIM(RIGHT(NULLIF(a.[Class],''),LEN(a.[Class])-CHARINDEX(',',a.[Class]))) as [Class] 
FROM [Legacy].[dbo].[MyTables] as a; 

Diese Abfrage, für diese Daten

PREMISES   Class 
Victoria Ln   210, Single Family (no style specified) 
West 10th Street 211, Ranch, Single Family 
East 2nd Street  Single Family 

Werden Sie diese Ausgabe geben:

PREMISES   Class 
Victoria Ln   Single Family (no style specified) 
West 10th Street Ranch, Single Family 
East 2nd Street  Single Family 
+0

Dies wird nicht funktionieren.Ich gab nur ein Beispiel.Ich muss generische Lösung, die für alle Zeilen gilt. Danke. – Sampath

+0

Dann müssen Sie die Qualität Ihrer Frage verbessern. –

+0

@ChrisPickford Fertig. – Sampath

2

Sie können die folgende Abfrage verwenden, um das Ergebnis ab , zurückzugeben.

SELECT a.[PREMISES], 
     SUBSTRING(a.[Class], CHARINDEX(',',a.[Class]) + 1, LEN(a.[Class])) as [Class] 
FROM [Legacy].[dbo].[MyTables] as a; 
0

Entfernen Sie einfach alle numerischen Zeichen aus einer Zeichenfolge.

SELECT a.[PREMISES], 
    SUBSTRING(a[Class], PATINDEX('%[a-z]%', a.[Class]), LEN(a.[Class])) 
    FROM [Legacy].[dbo].[MyTables] a 
0

Try this:

CREATE FUNCTION Fun_Refiner (@val VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    WHILE 1 = 1 
     BEGIN 
      IF PATINDEX('[0-9]%', @val) > 0 OR SUBSTRING(@val, 1, 1) = ',' 
       SET @val = RTRIM(LTRIM(REPLACE(@val,SUBSTRING(@val,PATINDEX('[0-9,]%',@val), 1), ''))); 
      ELSE 
       BREAK; 
     END; 
     RETURN @val 
END; 

Und es einfach so nennen.

SELECT a.[Class], dbo.Fun_Refiner(a.[Class]) FROM YourTable AS a