2009-05-04 7 views
10

Comment puis-je convertir hh: mm: ss en hh: mm dans SQL Server?Comment puis-je 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 

Répondre

8

En général, l'ensemble des horodateurs n'est pas well-ordered, cela signifie que vous ne pouvez pas obtenir une « dernière » horodatage dont à temps partiel jusqu'à minutes est 2009-05-06 14:58.

Dans SQL Server, qui maintient la partie du temps d'un datetime comme un certain nombre de 1/300 secondes fractions après minuit, cet horodatage « dernier » serait 2009-05-06 14:58:59.997, mais ce n'est pas garanti pour être compatible avec les versions futures de avec d'autres stockage TIMESTAMP méthodes

Cela signifie que vous devez diviser votre condition BETWEEN en deux conditions, dont une étant strict less que 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 efficace utiliser les index sur Date

1

Pour cette besoin spécifique, vous devez utiliser la méthode entre comme indiqué par Quassnoi's answer. Cependant, le problème général peut être résolu avec:

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

Je ne pense pas qu'il existe une fonction intégrée; habituellement quelque chose comme ça

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) 

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

19

CONVERT(VARCHAR(5),Date, 108) - ne reçoit que HH:mm

+0

Votre code fonctionne correctement –

1

Une façon serait d'utiliser la fonction RIGHT() pour recadrer 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 ex. il y a un zéro non significatif s'il y a lieu. (Désolé, il n'y a pas de serveur SQL ici pour tester).

Une meilleure façon est d'utiliser le T-SQL datepart fonction de diviser et puis re-concaténer les parties de date donc:

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

0

Pour obtenir hh: mm à partir de la date d'aujourd'hui:

select getdate() 

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

Pour obtenir hh: mm de toute colonne datetime dans une des données de table:

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

Alors que le code que les réponses peuvent résoudre le problème d'origine, il aiderait les autres lire votre réponse si vous avez donné quelques commentaires/explications sur ce que vous faites et pourquoi. –

Questions connexes