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.