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?
4 Réponses :
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
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.
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;
Vous pouvez trouver différents usages ou informations détaillées ici .
pour chaque fonction imbriquée est toujours exécutée la fonction interne .. et récursivement la suivante externe.