2016-11-20 4 views
0

Ich habe die folgenden Beispieldaten in einer SQL Server 2014 DatenbankExtrahieren von Zeichen nur in SQL Server

  • xxxx, yyyy: 679459
  • xxxx, yyyy: 679459
  • xxxx, yyyy: 679.459
  • xxxx, yyyy: 679459

Wie man dort sehen kann keine Einheitlichkeit der Art und Weise ist die Daten geschrieben und wird in einer der oben genannten Formate geschrieben.

Ich versuche, nur die letzten und Vornamen zu extrahieren dh xxxx, yyyy

Von einigen Recherchen im Internet fand ich die folgende und versuchte es

left(EMP_CLass_9_descr, isnull(nullif(charindex(' :', EMP_CLass_9_descr),0) - 1,8000)) As TM_NAME

Das funktionierte nur, wo es ein Raum vor dem:

ich habe auch versucht

left(EMP_CLass_9_descr, isnull(nullif(charindex(':', EMP_CLass_9_descr),0) - 1,8000)) As TM_NAME 

und dass dann umfasst einen Raum, in dem Szenario, in dem es als

  • xxxx, yyyy geschrieben: 679459

Gibt es Art und Weise ist, dass diese geschrieben werden kann, wo ich die xxxx, yyyy nur extrahieren?

Vielen Dank im Voraus für jede Hilfe, die Sie zur Verfügung stellen können.

+0

Ihre aktuelle Abfrage tut das bereits. –

Antwort

1

Rasmac, Sie waren fast da. Versuchen Sie dies:

left(EMP_CLass_9_descr, isnull(nullif(charindex(':', REPLACE(EMP_CLass_9_descr,' ','')),0) - 1,8000)) As TM_NAME 
+0

Danke eine Million John. Das funktioniert!! Sehr geschätzt. – rasmac

2

sollte diese Arbeit:

select ltrim(rtrim(left(EMP_CLass_9_descr, 
         charindex(':', EMP_CLass_9_descr + ':' 
           ) 
         ) 
       )) 

Das sieht für die ':', sondern stellt auch sicher, dass ein Doppelpunkt an das Ende des Namens gibt es einen durch Anhängen. Anschließend schneidet es den zurückgegebenen Wert ab, um führende und nachfolgende Leerzeichen zu entfernen.

+0

Danke Gordon, deine Lösung hat genau das gemacht, was du gesagt hast, aber die Lösung von John war genau das, wonach ich gesucht habe. Danke und sehr geschätzt – rasmac

+0

@rasmac. . . Ich denke diese Version ist einfacher. –

Verwandte Themen