Comment convertir hh: mm: ss en hh: mm dans 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
En général, l'ensemble des horodatages n'est pas bien ordonné , cela signifie que vous ne pouvez pas obtenir un "dernier" horodatage dont la partie temporelle allant jusqu'à minutes est 2009-05-06 14:58
.
Dans SQL Server
, qui conserve la partie heure d'une date/heure sous la forme d'un nombre de secondes 1/300
secondes après minuit, le "dernier" horodatage serait 2009-05-06 14:58:59.997
, mais sa compatibilité avec les versions futures avec d'autres méthodes de stockage TIMESTAMP
n'est pas garantie.
Cela signifie que vous devez diviser votre condition BETWEEN
en deux conditions, dont l'une est strict less
à la minute suivante:
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
Cette solution utilisera efficacement les index sur Date
CONVERT(VARCHAR(5),Date, 108)
-- Obtient uniquement HH:mm
SELECT Convert(varchar(5), GetDate(), 108)
L'utilisation de varchar (5) tronquera automatiquement la date pour supprimer les secondes.
Je ne pense pas qu'il existe une fonction intégrée; fais habituellement quelque chose comme ça
SET @time = '07:45'
SET @date = CONVERT(DATETIME,@time)
SELECT @date
SELECT LEFT(CONVERT(VARCHAR,@date,108),5)
Pour ce besoin spécifique, vous devez utiliser la méthode between indiquée par La réponse de Quassnoi . Cependant, le problème général peut être résolu avec:
select dateadd(second, -datepart(second, @date), @date)
Une solution serait d'utiliser la fonction DROITE () pour rogner la date. Quelque chose comme:
RIGHT(CONVERT(VARCHAR(8),Date, 108),5)
Cela ne fonctionnera que si le nombre de caractères est constant, par exemple. il y a un zéro non significatif le cas échéant. (Désolé, je n'ai pas eu le serveur SQL ici pour tester).
Un meilleur moyen consiste à utiliser la fonction date-composant T-SQL pour scinder puis concaténer les parties de date de manière à:
DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108))
Références:
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
Pour obtenir le format hh: mm à partir de la date du jour:
select getdate()
select convert(varchar(5),getdate(),108)
Pour obtenir le format hh: mm à partir de n’importe quelle colonne datetime dans les données d’un tableau:
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'
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5))