2017-03-28 8 views
0

J'ai 2 colonnes:nvarchar Divisé en extraire des valeurs entières dans MySQL

Duration  | ID 
0h 7m 55sec. | 1 
0h 25m 33sec.| 2 
10h 5m 5sec. | 3 
4h 11m 31sec.| 4 

Durée (nvarchar (255)) Je veux calculer la durée en NOMBRE TOTAL DE SECONDES pour chaque ID. J'ai essayé d'utiliser SUBSTRING puis CAST mais cela ne me donne pas la sortie désirée. Toute aide à ce sujet serait grandement appréciée.

+0

SUBSTRING puis CAST est la façon de le faire, de partager ce que vous avez? –

+0

Salut Alex, Merci d'avoir validé cela. Mais le problème est, je ne sais pas comment diviser le nvarchar sur 'h' 'm' 's Lorsque j'utilise Substring (Durée, 4, CharIndex (' m ', Durée)) Il me donne par exemple 7m 55 au lieu de seulement 7 –

+0

Encore une fois, publiez ce que vous avez, Stack Overflow n'est pas un service d'écriture de code, on s'attend à ce que vous essayiez de le coder vous-même. Je vous suggère de faire quelques recherches sur votre problème (essayez peut-être la boîte de recherche en haut de la page) et essayez d'écrire du code vous-même. Si/quand vous rencontrez des problèmes avec votre code, demandez à nouveau et expliquez ce que vous avez essayé, et pourquoi cela n'a pas fonctionné pour vous. Voir [Comment demander] (http://stackoverflow.com/help/how-to-ask) pour obtenir de l'aide en posant une bonne question ainsi que [Exemple minimum, complet, vérifiable] (http://stackoverflow.com/ aide/mcve). – bc004346

Répondre

0

Cette réponse est pour MySQL, car la question a été balisée à l'origine.

Yuck. Mais vous pouvez le faire:

select (substring_index(col, 'h ', 1) * 60 * 60 + 
     substring_index(substring_index(col, 'm ', 2), ' ', -1) * 60 + 
     substring_index(substring_index(col, 'sec.',1),' ', -1) 
     ) as duration_secs 
from t; 

Ceci extrait chaque composant et utilise ensuite la conversion implicite pour le calcul.

+0

Merci beaucoup Gordon Linoff. Pouvez-vous suggérer un moyen de faire la même chose sur le serveur Sql? –

+0

@Pradeep Yadav ... s'il vous plaît marquer votre question en tant que SQL Server si vous voulez une réponse SQL Server - il est actuellement tagué à MySQL. – RMathis

+0

@RMathis J'essayais d'effectuer la même opération sur MySQL et le serveur SQL. Mais j'ai ajouté une balise pour le serveur SQL maintenant. Merci pour la suggestion. –

0

La requête ci-dessous utilise str_to_date pour diffuser la chaîne, la fonction time_to_sec convertit la partie temps en secondes.

Cette approche sera interrompue si la durée dépasse 23h 59m 59sec. L'approche de @Gordon Linoff gérera ce scénario.

select id, 
     duration, 
     time_to_sec(str_to_date(duration,'%Hh %im %ssec.')) as seconds_elapsed;