2010-06-23 7 views
3

Comment puis-je sélectionner l'heure à partir d'un datetime? Je cherche l'équivalent de TO_CHAR(d, 'HH24') d'Oracle, qui retournerait 17 pour 2010-06-23 17:22:31.Obtenir l'heure à partir d'un datetime?


J'ai essayé de savoir sur le point de poser une question SQL sur StackOverflow concernant la PI, en utilisant Data Explorer le meilleur moment (meilleure réponse/question-ration). Je l'ai eu à travailler, mais je suis sûr qu'il existe une version plus élégante.

Select 
  Left(Convert(VARCHAR(10), creationDate, 8), 2) As hour, 
  Convert(Float, Count(*))/Count(Distinct p.parentId) As ratio 
From posts p 
Join postTags pt On (pt.postId = p.parentId) 
Join tags t On (t.id = pt.tagId) 
Where p.postTypeId = 2 And t.tagName = '##TagName##' 
Group By Left(Convert(VARCHAR(10), creationDate, 8), 2) 
Order BY hour 

BTW, le meilleur temps semble être entre 15:00 et 16:00 - suppose que je demande trop tard :)

Répondre

4

Utilisez DATEPART

select DATEPART(hour, DateTimeField) as Hour from Table 
+0

Ah, merci. C'est ce que je cherchais. –

1

Utilisez le DatePart() fonction tsql avec la partie ID « heure "

Regardez ce pour une bonne explication

http://support.microsoft.com/kb/186265

+0

Merci pour le lien supplémentaire ('+ 1') lien de –

+0

est mort –

1

Cela devrait fonctionner

SELECT DatePart(hh, GETDATE()) 
+0

Oui, cela fonctionne aussi ('+ 1') –

0

datepart(hh,dateColumn) Si vous obtenez le composant heure pour tout datetime.

0
Select DatePart(hh, CreationDate) As Hour 
    , Convert(Float, Count(*))/Count(Distinct p.parentId) As Ratio 
From posts As p 
    Join postTags As pt 
     On (pt.postId = p.parentId) 
    Join tags As t 
     On (t.id = pt.tagId) 
Where p.postTypeId = 2 
    And t.tagName = '##TagName##' 
Group By DatePart(hh, CreationDate) 
Questions connexes