2017-02-23 8 views
0

ich den Teil aus einer Zelle Wert wrt folgenden EG-Teilzeichenfolge Abfrage

Eingang erhalten möge: "JHAmbani.School" ----------- Schule

Ausgabe: "H.Ambani" ----------------- MidName

Das ist der gesamte Text, der zwischen dem ersten und dem letzten Punkt kommt. Länge der Zeichenfolge oder Anzahl der Punkte in der Zeichenfolge kann beliebig sein. Ich versuche, eine Abfrage für die obige Eingabespalte "School" zu erstellen, um die Ausgabespalte "MidName" zu erhalten. Was kann die SQL-Abfrage dafür sein?

+1

Welche Datenbank-Engine? –

+1

Was ist mit Eingabe wie "a.b.c.d.e.f.school"? – GurV

Antwort

0

Für Oracle Database:

SELECT 
    REGEXP_REPLACE(yourColumn, '^[^.]*.|.[^.]*$', '') AS yourAlias 
FROM yourTable 
0

Wenn versteht sich korrekt Ihr Problem durch Ihre Aussage „Das ist alles, der Text, der zwischen dem ersten und letzten Punkte kommt“. Dann unten ist die Lösung für Ihr Problem wie unten angegeben. Unten ist eine funktionierende Lösung in SQL SERVER für andere Datenbanken, die ich wegen Zeitmangels nicht überprüfen konnte.

@SourceString: Das ist Ihre Eingabe

@DestinationString: dies ist die Ausgabe

declare @SourceString varchar(100)='J.H.Ambani.School' 
declare @DestinationString varchar(100) 
;with result as 
(
select ROW_NUMBER()over (order by (select 100))SNO,d from(
select t.c.value('.','varchar(100)')as d from 
(select cast('<a>'+replace(@SourceString,'.','</a><a>')+'</a>' as  xml)data)as A cross apply data.nodes('/a') as t(c))B 
) 
select @DestinationString=COALESCE(@DestinationString+'.','')+ISNULL(d,'') from result where SNO>(select top 1 SNO from result order by SNO) 
and SNO<(select top 1 SNO from result order by SNO desc) 

select @DestinationString