web-dev-qa-db-fra.com

Comment convertir hh: mm: ss en hh: mm dans SQL Server?

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
13
Penguen

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

8
Quassnoi

CONVERT(VARCHAR(5),Date, 108)-- Obtient uniquement HH:mm

23
SQLMaster
SELECT Convert(varchar(5), GetDate(), 108)

L'utilisation de varchar (5) tronquera automatiquement la date pour supprimer les secondes.

5
Keith

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) 
2
u07ch

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)
1
Mehrdad Afshari

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

1
Jona

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'
0
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5))
0
Alex Purice