1
votes

Si j'ai deux substring_index, lequel est exécuté en premier?

Si j'ai deux substring_index, lequel est exécuté en premier? celui interne substring_index ( mycol , '/', 3) , ou celui externe?

www.yahoo.com
google.com

Exemples de piqûres que je veux traiter:

https://www.yahoo.com/
http://google.com/en/

Je veux obtenir:

substring_index(substring_index(`mycol`,'/',3),'://',-1)

1) Quel substring_index sera exécuté première? Ceci est important à savoir pour construire le deuxième substring_index en fonction de la sortie de ce qui a été exécuté en premier.

2) Ma déclaration substring_index est-elle correcte?


1 commentaires

pour chaque fonction imbriquée est toujours exécutée la fonction interne .. et récursivement la suivante externe.


4 Réponses :


0
votes

Vous pouvez également vérifier facilement

select substring_index(substring_index('http://google.com/en/','/',3),'://',-1);

www.yahoo.com

select substring_index(substring_index('https://www.yahoo.com/','/',3),'://',-1);

google.com

pour chaque fonction imbriquée est toujours exécutée la fonction intérieure .. et récursivement la prochaine extérieure


0 commentaires

0
votes

Le substring_index () externe ne peut être exécuté que s'il existe une valeur sur laquelle agir.
Dans ce cas, la valeur sur laquelle opérer est:

substring_index(`mycol`,'/',3)

Ainsi, le substring_index () imbriqué est exécuté en premier et fournit la valeur sur laquelle le substring_index ( ) fonctionne.
C'est ainsi que tous les langages de programmation, y compris SQL, évaluent les expressions.
Quant à la deuxième question: oui, l'énoncé est correct.


0 commentaires

0
votes

Tout comme une alternative à l'utilisation de SUBSTRING_INDEX , si vous utilisez MySQL 8+, vous pouvez utiliser une fonction de remplacement de regex:

SELECT
    REGEXP_REPLACE('http://google.com/en/', 'https?://([^/]+)', '$1') AS url
FROM yourTable;

Démo


0 commentaires

0
votes
  1. les instructions entre parenthèses ont toujours une priorité plus élevée.
  2. L'index de sous-chaîne interne
  3. coupe simplement le caractère «/» à la fin. (« https://www.yahoo.com »). index de sous-chaîne externe trims «https: //» («Www.yahoo.com»). Votre déclaration est très bien.

Vous pouvez trouver différents usages ou informations détaillées ici .


0 commentaires