Maison  >  Article  >  base de données  >  Étude de cas SQL : fusion et fractionnement de chaînes

Étude de cas SQL : fusion et fractionnement de chaînes

WBOY
WBOYavant
2022-09-01 14:44:382590parcourir

Cet article vous apporte des connaissances pertinentes sur SQL server. Il vous présente principalement les informations pertinentes sur la fusion et le fractionnement de chaînes dans l'étude de cas SQL. L'article présente respectivement deux méthodes, qui vous aideront à apprendre ou à utiliser Oracle. certaine valeur d'apprentissage de référence, les amis dans le besoin peuvent s'y référer.

Étude de cas SQL : fusion et fractionnement de chaînes

Apprentissage recommandé : "Tutoriel SQL"

Fusion de chaînes

Il peut y avoir plusieurs méthodes d'implémentation dans Oracle. Actuellement, il y en a deux que je connais, qui sont enregistrées ci-dessous Implémentation. de ces deux :

Méthode de fusion de chaînes 1 :

Implémentation de 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;

Résultats de l'exécution :

Analyse SQL :

Utiliser wm_concat() d'Oracle fonction Il y a un inconvénient lors de la fusion de chaînes, le symbole de connexion pour la fusion ne peut être que la virgule par défaut et aucun autre symbole ne peut être utilisé.

Deuxième méthode de fusion de chaînes :

Implémentation de SQL :

--方法二
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;

Résultats d'exécution :

Analyse SQL :

Utilisez la fonction LISTAGG() d'Oracle pour fusionner des chaînes. L'avantage est que le le symbole de connexion fusionné peut être spécifié comme n'importe quel caractère et le tri ORDER BY peut être facilement implémenté.

Partage de chaînes

Il peut y avoir plusieurs méthodes d'implémentation dans Oracle Actuellement, j'en connais deux. L'implémentation de ces deux est enregistrée ci-dessous :

Méthode de fractionnement de chaînes 1 :

Implémenter. 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;

Résultat de l'exécution :

Analyse SQL :

Cette instruction est un peu compliquée Voici une explication étape par étape :

Premier coup d'œil à l'original des films. Données du tableau :

1. La première étape consiste à diviser initialement la valeur du champ de classe en deux parties selon le délimiteur (voici la virgule). La première partie est la première valeur du champ de classe à diviser et la deuxième partie est la valeur des parties restantes du champ de classe à diviser.

2. La deuxième étape utilise l'expression AVEC pour implémenter la requête récursive, et boucle pour diviser la valeur non divisée (la deuxième partie) dans la première étape en fonction du séparateur (voici la virgule). le dernier délimiteur du champ, et les données à la fin de la récursion sont placées dans la table temporaire t.

3. La troisième étape est une requête simple pour interroger et trier les enregistrements de la table temporaire t dans la deuxième étape.

Méthode de fractionnement de chaîne deux :

Implémentation de SQL :

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

Résultat de l'exécution :

Analyse SQL :

Cette méthode est en fait en personnalisant une fonction ( function) pour traiter les chaînes. La logique de la fonction split est en fait similaire à la logique de la méthode 1. Elles utilisent toutes deux la récursion pour diviser les valeurs de la chaîne une par une en fonction du délimiteur, et finalement renvoyer la chaîne divisée. Personnellement, je pense que cette méthode est meilleure car elle encapsule la logique de fractionnement, la rendant plus simple à utiliser et plus claire en logique.

Ce qui suit est le script de création de la fonction split :

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;

Le type de valeur de retour de la fonction, tabletype, est également un type personnalisé.

Voici le script de création de ce type :

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

Apprentissage recommandé : "Tutoriel SQL"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer