[MS SQL] Spalteninhalt splitten

fUnKuCh3n

Erfahrenes Mitglied
Hallo,

ich habe ein Statement was mir Daten aus der DB holt, siehe folgender Code:
Code:
select 
displayname,
mail
from adobjects
where type = '1'
and mail <> ''
order by displayname

Das Ergebniss ist wie folgt:
Mustermann, Maxmax.mustermann@musterdomain.de

Ich benötige die Daten allerdings in Vor- und Nachname aufgeteilte Spalten.
Quasi:
MustermannMaxmax.mustermann@musterdomain.de

Im Netz konnte ich da nun noch keine so funktionelle Idee dazu finden wie ich das am leichtesten umsetze.

Hat da jemand eine Idee oder Anregung wie das klappen könnte?
 
Solange der displaynamesauber mit Komma getrennt ist.
Leider fand ich bei meiner schnellen Suche kein Regex für MS SQL. Darum habe ich mit der Onlinedoku zu MS SQL den folgenden Code zusammengeschustert.
Mein Test bei SQL Fiddle
SQL:
SELECT
  IIF(
    -- Überprüfen ob ein Komma vorhanden ist. Wenn nicht, ist t.displayname der Nachname
    CHARINDEX(',', t.displayname) = 0,
    t.displayname,
    RTRIM(
      SUBSTRING(
        t.displayname, 
        1, 
        CHARINDEX(',', t.displayname)-1
      )
     )
  ) AS nachname,

  IIF(
    CHARINDEX(',', t.displayname) = 0,
    '',
    LTRIM(
      SUBSTRING(
        t.displayname, 
        CHARINDEX(',', t.displayname) + 1, 
        LEN(t.displayname)
      )
    )
  ) AS vorname
FROM
  adobjects t
 
Zuletzt bearbeitet von einem Moderator:
Führe ich das Statement im SQL Management Center aus bekomme ich folgende Rückmeldung:

Code:
Meldung 102, Ebene 15, Status 1, Zeile 4
Falsche Syntax in der Nähe von '='.

Wo hingegen es bei SQL Fiddle einwandfrei funktioniert.
Es ist nen SQL 2008 R2.

Nachtrag: wenn ichs bei SQL Fiddle auf 2008 ab änder kommt auch eine Fehlermeldung...
 
Da gibts wohl Versionsunterschiede.
Vergleich mal die Befehle, ob diese alle bei MSSQL2008 vorhnaden sind.

Das müsste ich jetzt auch machen, da ich bis heute Morgen noch nie mit irgend einer Version von MSSQL gerbeitet habe....

Wenn wir wissen, welchen Befehl es in der 2008er nicht gibt, können wir alternativen suchen.
 
Habs nun umgebaut:

SQL:
SELECT
	CASE
		CHARINDEX(',', t.displayname) 
		WHEN '0' 
		THEN t.displayname 
		ELSE RTRIM(SUBSTRING(t.displayname,1,CHARINDEX(',', t.displayname)-1))
	END  as 'Nachname' ,

	CASE
		CHARINDEX(',', t.displayname) 
		WHEN '0'
		THEN ''
		ELSE
		LTRIM(SUBSTRING(t.displayname,CHARINDEX(',', t.displayname) + 1,LEN(t.displayname)))
		END AS Vorname,
		mail
	FROM
		adobjects t
		where mail <> ''
 

Neue Beiträge

Zurück