2010-02-23 7 views
10

Supposons que j'ai 90 secondes. Si je veux afficher le résultat en termes de minutes et secondes, je le fais en utilisantMéthode efficace pour convertir les secondes en secondes et secondes en SQL Server 2005

select Time= '0' + CAST(90/60 as varchar(2)) + ':' + CAST(90%60 as varchar(2)) 

La sortie est

temps
01:30

J'ai joint 0 (zéro) parce que si vous faites un select getdate() la sortie sera

aaaa-mm-jj hh: mm: ss: ms

Quelle est la méthode standard et la pratique recommandée pour effectuer une telle conversion?

Merci

Répondre

23

Avec heures:

SELECT CONVERT(CHAR(8),DATEADD(second,90,0),108) 
00:01:30 

heures Ignorant:

SELECT RIGHT(CONVERT(CHAR(8),DATEADD(second,90,0),108),5) 
01:30 
+0

C'est génial .. mais il montre aussi le champ heure. Je n'ai besoin que de mm: ss. Dois-je utiliser un droit à cela? SELECT à droite (CONVERT (CHAR (8), DATEADD (seconde, 90,0), 108), 5). Ou n'importe quel moyen standard est là –

+0

Oui, je modifiais lorsque vous avez posté votre commentaire. –

+0

Cela ne fonctionne pas avec des secondes égales ou plus alors en une journée: SELECT CONVERT (CHAR (8), DATEADD (seconde, 86400,0), 108) – gotqn

0

L'une des premières choses que je fais sur une nouvelle base de données SQL est d'ajouter une fonction Timespan similaire à celui-ci (bien que j'aie tendance à inclure aussi les jours et les millisecondes):

CREATE FUNCTION dbo.TimeSpan 
(
    @Hours int, 
    @Minutes int, 
    @Seconds int 
) 
RETURNS datetime 
AS BEGIN 
    RETURN DATEADD(SS, @Hours * 3600 + @Minutes * 60 + @Seconds, 0) 
END 

Ensuite, vous pouvez formater ce que vous voulez cependant:

SELECT SUBSTRING(CONVERT(char(8), dbo.TimeSpan(0, 0, 90), 108), 4, 5) 

Cela peut sembler plus compliqué au début, mais la possibilité de réutiliser la fonction TimeSpan est très pratique au fil du temps. Pour moi, il se sent comme un hack pour toujours écrire DATEADD appels contre 0 ou '1753-01-01'.

+0

Cette solution ne fonctionne qu'avec de petits nombres. Par exemple, si vous avez 82816 secondes que SELECT SUBSTRING (CONVERT (char (8), dbo.TimeSpan (0, 0, 82816), 108), 4, 5) renvoie seulement 16 secondes! – Dave

3

Essayez ceci:

select convert(varchar(10), dateadd(second, 15794, 0), 108) 
Questions connexes