Heim  >  Artikel  >  Datenbank  >  SQL-Fallstudie: Strings zusammenführen und aufteilen

SQL-Fallstudie: Strings zusammenführen und aufteilen

WBOY
WBOYnach vorne
2022-09-01 14:44:382597Durchsuche

Dieser Artikel vermittelt Ihnen relevante Informationen zum Zusammenführen und Aufteilen von Zeichenfolgen in der SQL-Fallstudie. Der Artikel stellt Ihnen das Erlernen oder die Verwendung von Oracle vor Bestimmte Referenz-Lernwerte, Freunde in Not können sich darauf beziehen.

SQL-Fallstudie: Strings zusammenführen und aufteilenEmpfohlenes Lernen: „

SQL-Tutorial

String-Zusammenführung

Es gibt möglicherweise mehrere Implementierungsmethoden in Oracle. Derzeit sind mir zwei bekannt, die unter „Implementierung“ aufgeführt sind von diesen beiden:

Methode zum Zusammenführen von Zeichenfolgen eins:

Implementierung von SQL:

--方法一
SELECT d.dept_name,wm_concat(e.emp_name) FROM employee e
INNER JOIN department d ON d.dept_id=e.dept_id
GROUP BY d.dept_name;

Ausführungsergebnisse:

SQL-Analyse:

Verwenden Sie Oracles eigene. wm _concat() Funktion Es gibt einen Nachteil Beim Zusammenführen von Zeichenfolgen kann das Verbindungssymbol zum Zusammenführen nur das Standardkomma sein und es können keine anderen Symbole verwendet werden.

String-Zusammenführungsmethode zwei:

SQL implementieren:

--方法二
SELECT d.dept_name,
LISTAGG (e.emp_name, ',') WITHIN GROUP (ORDER BY e.emp_name) names
FROM employee e
INNER JOIN department d ON d.dept_id=e.dept_id
GROUP BY d.dept_name;

Ausführungsergebnisse:

SQL-Analyse:

Verwenden Sie Oracles eigene LISTAGG()-Funktion zum Zusammenführen Der Vorteil ist, dass die Das zusammengeführte Verbindungssymbol kann als beliebiges Zeichen angegeben werden, und die Sortierung ORDER BY kann einfach implementiert werden.

String-Splitting

Derzeit sind mir zwei Implementierungsmethoden bekannt:

String-Splitting-Methode 1:

Implementieren SQL:

--方法一
WITH  t (id, name, sub, str) AS (
    SELECT id, name, substr(class, 1, instr(class, '、')-1), substr(concat(class,'、'), instr(class, '、')+1) 
    FROM movies
    
    UNION ALL
    
    SELECT id, name,substr(str, 1, instr(str, '、')-1), substr(str, instr(str, '、')+1)
    FROM t WHERE instr(str, '、')>0
) 
 
SELECT id, name, sub
FROM t
ORDER BY id;

Ausführungsergebnis:

SQL-Analyse:

Diese Aussage ist etwas kompliziert. Hier eine Schritt-für-Schritt-Erklärung: Schauen Sie sich zunächst das Original der Filme an Tabellendaten:

1 Der erste Schritt besteht darin, den Wert des Klassenfelds zunächst entsprechend dem Trennzeichen (hier ist das Komma) in zwei Teile aufzuteilen. Der erste Teil ist der erste Wert des zu teilenden Klassenfelds und der zweite Teil ist der Wert der verbleibenden Teile des zu teilenden Klassenfelds.

2. Der zweite Schritt verwendet den WITH-Ausdruck, um die rekursive Abfrage zu implementieren, und führt eine Schleife durch, um den nicht geteilten Wert (den zweiten Teil) gemäß dem Trennzeichen (hier ist das Komma) aufzuteilen das letzte Trennzeichen des Feldes und die Daten am Ende der Rekursion werden in der temporären Tabelle t abgelegt.

3. Der dritte Schritt ist eine einfache Abfrage, um die Datensätze aus der temporären Tabelle t im zweiten Schritt abzufragen und zu sortieren.

String-Splitting-Methode zwei:

Implementierung von SQL:

--方法二
SELECT m.name,t.column_value FROM movies m,TABLE(SPLIT(m.class,'、')) t;

Ausführungsergebnis:

SQL-Analyse:

Diese. Methode Dies geschieht tatsächlich durch Anpassen einer Funktion (Funktion). Die Logik der Funktionsaufteilung ähnelt tatsächlich der Logik von Methode 1. Beide verwenden die Rekursion, um die Werte in der Zeichenfolge einzeln gemäß dem Trennzeichen aufzuteilen und schließlich die geteilte Zeichenfolge zurückzugeben. Persönlich bin ich der Meinung, dass diese Methode besser ist, weil sie die Aufteilungslogik kapselt, wodurch sie einfacher zu verwenden und klarer in der Logik ist. Das Folgende ist das Erstellungsskript der Split-Funktion:

create or replace function split (p_list clob, p_sep varchar2 := ',')
  return tabletype
  pipelined
 
is
  l_idx    pls_integer;
  v_list  varchar2 (32676) := to_char(p_list);
begin
  loop
      l_idx  := instr (v_list, p_sep);
 
      if l_idx > 0
      then
        pipe row (substr (v_list, 1, l_idx - 1));
        v_list  := substr (v_list, l_idx + length (p_sep));
      else
        pipe row (v_list);
        exit;
      end if;
  end loop;
end;

Der Rückgabewerttyp der Funktion, tabletype, ist ebenfalls ein benutzerdefinierter Typ.

Das Folgende ist das Erstellungsskript dieses Typs:

create or replace type tabletype as table of varchar2(32676);

Empfohlenes Lernen: „

SQL-Tutorial

Das obige ist der detaillierte Inhalt vonSQL-Fallstudie: Strings zusammenführen und aufteilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen