T-SQL-String-Splitting: Behebung fehlender Trennzeichen
Daten mit inkonsistenten Trennzeichen erfordern eine robuste Handhabung von Szenarien mit fehlenden Trennzeichen. Schauen wir uns ein häufiges Problem an:
Stellen Sie sich eine Tabelle („MyTable“) mit einer Spalte „Name“ vor, in der Namen im Format FirstName/LastName
gespeichert sind. Bei einigen Einträgen fehlt jedoch möglicherweise das Trennzeichen „/“:
<code>FirstName---LastName John--------Smith Jane--------Doe Steve-------NULL -- Missing delimiter Bob---------Johnson</code>
Ein naiver SUBSTRING
und CHARINDEX
Ansatz wie dieser schlägt fehl, wenn ein Trennzeichen fehlt:
<code class="language-sql">SELECT SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName, SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName FROM MyTable;</code>
Der Fehler „Ungültiger Längenparameter an die LEFT- oder SUBSTRING-Funktion übergeben“ tritt auf, weil CHARINDEX
0 zurückgibt, wenn das Trennzeichen nicht gefunden wird, was zu einer negativen Teilzeichenfolgenlänge führt.
Die Lösung: Bedingte Teilstring-Extraktion
Die Lösung beinhaltet eine CASE
-Anweisung zur bedingten Bestimmung der Teilstringlänge:
<code class="language-sql">SELECT SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName, SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName FROM MyTable;</code>
Diese verfeinerte Abfrage verwendet CASE
, um beide Szenarien zu behandeln:
CHARINDEX('/') = 0
): Die Teilzeichenfolgenlänge für FirstName
wird zur gesamten Zeichenfolgenlänge (LEN(Name)
), und die LastName
-Teilzeichenfolge beginnt an einer Position ein Zeichen hinter dem Ende der Zeichenfolge (LEN(Name) 1
) und gibt effektiv NULL
.SUBSTRING
-Logik wird angewendet.Dieser robuste Ansatz garantiert korrekte Ergebnisse unabhängig vom Vorhandensein von Trennzeichen und verhindert den Fehler „Ungültiger Längenparameter“.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit fehlenden Trennzeichen beim Teilen von Zeichenfolgen in T-SQL um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!