2010-02-23 19 views
10

Supongamos que tengo 90 segundos. Si quiero mostrar el resultado en términos de minutos y segundos, lo hago utilizandoManera eficiente de convertir segundos a minutos y segundos en el servidor sql 2005

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

La salida es

Tiempo
01:30

He anexado 0 (cero) porque si hace un select getdate() la salida será

aaaa-mm-dd hh: mm: ss: ms

¿Cuál es la forma estándar y la práctica recomendada para realizar tal conversión?

Gracias

Respuesta

23

Con horas:

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

horas Ignorar:

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

Eso es grande .. pero también está mostrando el campo de la hora. Necesito solo mm: ss. ¿Debo usar un derecho a eso, p. SELECCIONAR a la derecha (CONVERTIR (CHAR (8), DATEADD (segundo, 90,0), 108), 5). O cualquier forma estándar es –

+0

Sí, estaba editando cuando publicó su comentario. –

+0

Eso no funciona con segundos iguales o más que estos en un día: SELECCIONAR CONVERTIR (CHAR (8), DATEADD (segundo, 86400,0), 108) – gotqn

0

Una de las primeras cosas que hago en una base de datos SQL fresca es añadir una función Timespan similar a éste (aunque tiendo a incluir días y milisegundos también):

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

A continuación, puede dar formato a esto, sin embargo desea:

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

al principio puede parecer más complicado al principio, pero la capacidad de reutilizar la función TimeSpan es muy útil en el tiempo. Para mí se siente como un truco escribir siempre llamadas DATEADD contra 0 o '1753-01-01'.

+0

Esta solución solo funciona con números pequeños. Por ejemplo, si tiene 82816 segundos que SELECCIONAR SUBSTRING (CONVERT (char (8), dbo.TimeSpan (0, 0, 82816), 108), 4, 5) ¡devuelve solo 16 segundos! – Dave

3

Prueba esto:

select convert(varchar(10), dateadd(second, 15794, 0), 108) 
Cuestiones relacionadas