Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit fehlenden Trennzeichen beim Teilen von Zeichenfolgen in T-SQL um?

Wie gehe ich mit fehlenden Trennzeichen beim Teilen von Zeichenfolgen in T-SQL um?

Susan Sarandon
Freigeben: 2025-01-08 09:47:42
Original
172 Leute haben es durchsucht

How to Handle Missing Delimiters When Splitting Strings in T-SQL?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Diese verfeinerte Abfrage verwendet CASE, um beide Szenarien zu behandeln:

  • Trennzeichen fehlt (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.
  • zurück
  • Trennzeichen vorhanden:Die ursprüngliche 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage