MySQL-String-Aufteilungsvorgang (String-Abfangen mit Trennzeichen)

MySQL-String-Aufteilungsvorgang (String-Abfangen mit Trennzeichen)

String-Extraktion ohne Trennzeichen

Fragenanforderungen

Feldwert in der Datenbank:

Implementierungseffekt: Eine Datenzeile muss in mehrere Zeilen umgewandelt werden

Implementiertes SQL

Wählen Sie links (Substring ('P1111', Hilfethema-ID + 1), 1) als Nummer aus mysql.help_topic, wobei Hilfethema-ID < Länge ('P1111');

Beteiligte Wissenspunkte

1. String-Abfangen: SUBSTRING(str,pos)

1. Parameterbeschreibung

Parametername erklären
str Die zu teilende Zeichenfolge
delim Trennzeichen, durch ein Zeichen getrennt
zählen Wenn „Anzahl“ eine positive Zahl ist, werden alle Zeichen vor dem n-ten Trennzeichen übernommen. Wenn „Anzahl“ eine negative Zahl ist, werden alle Zeichen nach dem n-ten Trennzeichen vom Ende her übernommen.

2. Beispiele

(1) Alle Zeichen vor dem zweiten Komma "," als Trennzeichen verwenden.

SUBSTRING_INDEX('7654,7698,7782,7788',',',2)

(2) Alle Zeichen nach dem vorletzten Kommatrennzeichen "," abrufen

SUBSTRING_INDEX('7654,7698,7782,7788',',',-2)

2. Ersetzungsfunktion: replace(str, from_str, to_str)

1. Parametererklärung

Parametername erklären
str Die zu ersetzende Zeichenfolge
from_str Die zu ersetzende Zeichenfolge
zu_str Die zu ersetzende Zeichenfolge

2. Beispiele

(1) Ersetzen Sie das Trennzeichen ",", Komma durch das Leerzeichen "".

ERSETZEN('7654,7698,7782,7788',',','')

3. Ermitteln Sie die Länge des Strings: LENGTH( str )

1. Parametererklärung

Parametername erklären
str Die Zeichenfolge, deren Länge berechnet werden muss

2. Beispiele

(1) Ermitteln Sie die Länge der Zeichenfolge '7654,7698,7782,7788'

LÄNGE('7654,7698,7782,7788')

Implementiertes SQL-Parsing

WÄHLEN 
 SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS Nummer 
AUS 
 mysql.hilfe_thema 
WO 
 Hilfethema-ID < LÄNGE('7654,7698,7782,7788')-LÄNGE(ERSETZEN('7654,7698,7782,7788',',',''))+1

Hier wird help_topic_id aus der help_topic-Tabelle der MySQL-Bibliothek als Variable verwendet, da help_topic_id automatisch inkrementiert wird. Natürlich können auch automatisch inkrementierte Felder anderer Tabellen als Hilfe verwendet werden.

help_topic-Tabelle:

Implementierungsschritte:

Schritt 1: Ermitteln Sie zunächst die Anzahl der Zeichenfolgen, die am Ende aufgeteilt werden müssen, und simulieren Sie mithilfe von help_topic_id das Durchlaufen der n-ten Zeichenfolge.

Der Codeausschnitt beinhaltete:

Hilfethema-ID < LÄNGE('7654,7698,7782,7788')-LÄNGE(ERSETZEN('7654,7698,7782,7788',',',''))+1

Schritt 2: Teilen Sie die Zeichenfolge basierend auf dem Komma "," mithilfe der Funktion SUBSTRING_INDEX (str, delim, count) auf und weisen Sie das Ergebnis dem Feld „num“ zu.

Der Codeausschnitt beinhaltete:

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS Nummer

Erster Schritt:

Verwenden Sie das Komma "," als Trennzeichen und fangen Sie alle Zeichenfolgen vor dem n+1. Trennzeichen entsprechend dem Wert von help_topic_id ab. (Hier liegt n+1 daran, dass help_topic_id bei 0 beginnt und wir es hier aus dem ersten Trennzeichen abrufen müssen.)

SUBSTRING_INDEX('7654,7698,7782,7788',',',Hilfethema-ID+1)

Zum Beispiel:

Wenn help_topic_id = 0, ist die erhaltene Zeichenfolge = 7654

Wenn help_topic_id = 1, ist die erhaltene Zeichenfolge = 7654,7698

…(und so weiter)

Schritt 2:

Verwenden Sie das Komma "," als Trennzeichen und extrahieren Sie alle Zeichenfolgen nach dem letzten Trennzeichen.

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',Hilfethema-ID+1),',',-1)

Zum Beispiel:

Laut dem ersten Schritt ist die erhaltene Zeichenfolge 7654, wenn help_topic_id = 0 ist. Zu diesem Zeitpunkt ist die im zweiten Schritt abgefangene Zeichenfolge 7654.

Laut dem ersten Schritt ist die erhaltene Zeichenfolge 7654,7698, wenn help_topic_id = 1 ist. Zu diesem Zeitpunkt ist die im zweiten Schritt abgefangene Zeichenfolge 7698.

…(und so weiter)

Schließlich wurden die folgenden Effekte erfolgreich erzielt ~

Hinweis: Informationen zum Aufteilen von Zeichenfolgen ohne Trennzeichen finden Sie unter MySQL – Zeichenfolgenaufteilung (Zeichenfolgenabfang ohne Trennzeichen).

Ergänzung: MySQL-Feldtrennzeichen split_Eine Funktion ähnlich SPLIT in MySQL zum Teilen von Zeichenfolgen

Die folgende Funktion implementiert die Verarbeitung von Zeichenfolgen wie Arrays.

1. Verwenden einer temporären Tabelle als Array

Erstellen Sie die Funktion f_split(@c varchar(2000),@split varchar(2)).
gibt @t table(col varchar(20)) zurück
als
beginnen
während(charindex(@split,@c)<>0)
beginnen
@t(col)-Werte einfügen (Teilzeichenfolge(@c,1,Charindex(@split,@c)-1))
setze @c = Zeug(@c,@c),'')
Ende
@t(col)-Werte einfügen (@c)
zurückkehren
Ende
gehen
wähle * aus dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')
Drop-Funktion f_split
spalte
--------------------
dfkd
Abonnieren
Abonnieren
Abonnieren

(Die Anzahl der betroffenen Zeilen beträgt 4)

2. Teilen Sie die Zeichenfolge durch das angegebene Symbol

Gibt die Anzahl der Elemente nach der Segmentierung zurück. Die Methode ist sehr einfach. Schauen Sie sich einfach an, wie viele Trennzeichen in der Zeichenfolge vorhanden sind, und fügen Sie dann eines hinzu. Das ist das gewünschte Ergebnis.

CREATE-Funktion Get_StrArrayLength
(
@str varchar(1024),--der zu teilende String @split varchar(10) --Trennzeichen)
gibt int zurück
als
beginnen
Deklarieren Sie @location int
deklarieren Sie @start int
Deklarieren Sie @length int
setze @str=ltrim(rtrim(@str))
setze @location=charindex(@split,@str)
setze @length=1
während @Standort<>0
beginnen
setze @start=@location+1
setze @location=charindex(@split,@str,@start)
setze @length=@length+1
Ende
returniere @Länge
Ende

Aufrufbeispiel:

Wählen Sie dbo.Get_StrArrayLength('78,2,3',')

Rückgabewert: 4

3. Teilen Sie die Zeichenfolge durch das angegebene Symbol

Gibt das Element am angegebenen Index nach der Segmentierung zurück, so bequem wie ein Array

CREATE-Funktion Get_StrArrayStrOfIndex
(
@str varchar(1024),--der zu teilende String @split varchar(10),--Trennzeichen @index int --das erste zu nehmende Element)
gibt varchar(1024) zurück
als
beginnen
Deklarieren Sie @location int
deklarieren Sie @start int
deklarieren Sie @next in
@seed int deklarieren
setze @str=ltrim(rtrim(@str))
setze @start=1
setze @next=1
setze @seed=len(@split)
setze @location=charindex(@split,@str)
während @location<>0 und @index>@next
beginnen
setze @start=@location+@seed
setze @location=charindex(@split,@start)
setze @next=@next+1
Ende
wenn @location =0 wähle @location =len(@str)+1
--Hier gibt es zwei Situationen: 1. Der String enthält kein Trennzeichen. 2. Der String enthält ein Trennzeichen. Nach dem Verlassen der while-Schleife ist @location 0, was bedeutet, dass standardmäßig ein Trennzeichen nach dem String steht.
Teilzeichenfolge zurückgeben(@str,@start,@location-@start)
Ende

Aufrufbeispiel:

Wählen Sie dbo.Get_StrArrayStrOfIndex('8,9,4',2)

Rückgabewert: 9

4. Kombinieren Sie die beiden oben genannten Funktionen und durchlaufen Sie die Elemente in der Zeichenfolge wie ein Array

Deklarieren Sie @str varchar (50)
setze @str='1,3,4,5'
deklarieren Sie @next in
setze @next=1
während @next<=dbo.Get_StrArrayLength(@str,')
beginnen
drucken dbo.Get_StrArrayStrOfIndex(@str,@next)
setze @next=@next+1
Ende

Anrufergebnis:

1

2

3

4

5

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • MySQL-String-Splitting-Beispiel (String-Extraktion ohne Trennzeichen)
  • MySql-String-Splitting zur Realisierung der Split-Funktion (Feld-Splitting und Spalten-Transfer)

<<:  CSS-Navigationsleistenmenü mit kleinem Dreieck-Implementierungscode

>>:  Grundlegende Nutzungsdetails zur Vue-Komponentenbildung

Artikel empfehlen

Reines HTML und CSS, um den JD-Karusselleffekt zu erzielen

Das JD-Karussell wurde mit reinem HTML und CSS im...

Drei Möglichkeiten, doppeltes Einfügen von Daten in MySql zu vermeiden

Vorwort Im Falle eines Primärschlüsselkonflikts o...

Objektorientierte Programmierung mit XHTML und CSS

<br />Wenn XHTML und CSS nur objektorientier...

Eine einfache Implementierungsmethode für eine digitale LED-Uhr in CSS3

Das dürfte etwas sein, was viele Leute gemacht ha...

Beispiel zum Hochladen eines Docker-Images in ein privates Repository

Das Image kann problemlos direkt in das öffentlic...

JavaScript Canvas zeichnet dynamische Drahtgittereffekte

In diesem Artikel wird der spezifische Code des d...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...

Lösung für falsche Zeichenfolgenwerte in MySQL

Viele Freunde berichten von folgendem Fehler, wen...

Codebeispiel für das Nutzungsszenario der Nginx-Domänenweiterleitung

Szenario 1: Aufgrund von Serverbeschränkungen ist...

Beispiele für die Verwendung von DD DT DL-Tags

Normalerweise verwenden wir die Tags <ul><...