2009-05-04 53 views
10

¿Cómo convierto hh: mm: ss a hh: mm en SQL Server?¿Cómo convierto hh: mm: ss a hh: mm en SQL Server?

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog 
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58' 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page,Date order by [VisitingCount] asc 

Respuesta

8

En general, el conjunto de marcas de tiempo no es well-ordered, esto significa que no puede obtener un "último" marca de tiempo cuyo tiempo parcial hasta un minuto es 2009-05-06 14:58.

En SQL Server, que mantiene la parte de hora de una fecha y hora como un número de 1/300 segunda fracciones después de la medianoche, este "último" marca de tiempo sería 2009-05-06 14:58:59.997, pero esto no se garantiza que sea compatible con futuras versiones de con otra TIMESTAMP de almacenamiento métodos.

Eso significa que tendrá que dividir su condición BETWEEN en dos condiciones, una de ellas siendo strict less que el minuto siguiente:

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog 
where Date >= '2009-05-04 00:00:00' 
     AND Date < DATEADD(minute, 1, '2009-05-06 14:58') 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page,Date order by [VisitingCount] asc 

Esta solución va a utilizar de manera eficiente los índices de Date

1

Por esta necesidad específica, debe usar el método between como se indica en Quassnoi's answer. Sin embargo, el problema general se puede resolver con:

select dateadd(second, -datepart(second, @date), @date) 
1

No creo que haya una función incorporada; por lo general hacer algo como esto

SET @time = '07:45' 
SET @date = CONVERT(DATETIME,@time) 
SELECT @date 

SELECT LEFT(CONVERT(VARCHAR,@date,108),5) 
4
SELECT Convert(varchar(5), GetDate(), 108) 

El uso de varchar (5) truncará automáticamente la fecha para eliminar los segundos.

19

CONVERT(VARCHAR(5),Date, 108) - Obtiene solamente HH:mm

+0

Su código funciona correctamente –

1

Una forma sería utilizar la función derecha() para recortar la fecha. Algo como:

RIGHT(CONVERT(VARCHAR(8),Date, 108),5) 

Esto solo funcionará si el número de caracteres es constante, p. hay un cero inicial si corresponde. (Lo sentimos, no tenemos SQL Server aquí para probar).

Una mejor manera es usar el T-SQL datepart función de dividir y volver a contatenar las partes de la fecha así:

DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108)) 

Referencias:

http://msdn.microsoft.com/en-us/library/ms174420.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx
http://msdn.microsoft.com/en-us/library/ms177532.aspx

0

Para obtener el formato hh: mm a partir de la fecha de hoy:

select getdate() 

select convert(varchar(5),getdate(),108) 

Para obtener el formato hh: mm desde cualquier columna de fecha y hora en una tabla de datos:

select date_time_column_name from table_name where column_name = 'any column data name' 

select convert(varchar(5),date_time_column_name,108) from table_name 
where column_name = 'any column data name' 

select creationdate from employee where Name = 'Satya' 

select convert(varchar(5),creationdate,108) from employee 
where Name = 'Satya' 
0
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5)) 
+0

Mientras código sólo respuestas pueden resolver el problema original, sería ayudar a los demás leyendo su respuesta si dio algunos comentarios/explicaciones sobre lo que hace y por qué. –

Cuestiones relacionadas