web-dev-qa-db-fra.com

Partie temporelle d'un champ DateTime en SQL

Comment pourrais-je extraire la partie heure d'un champ DateTime en SQL? Pour mon projet, je dois renvoyer des données dont l'horodatage de 17h00 d'un champ DateTime, quelle que soit la date

42
ghost_king

Dans SQL Server, si vous n'avez besoin que du hh:mi, vous pouvez utiliser:

DECLARE @datetime datetime

SELECT @datetime = GETDATE()

SELECT RIGHT('0'+CAST(DATEPART(hour, @datetime) as varchar(2)),2) + ':' +
       RIGHT('0'+CAST(DATEPART(minute, @datetime)as varchar(2)),2)
31
András Ottó

Si vous souhaitez uniquement l'heure de votre date/heure, vous pouvez utiliser DATEPART() - SQL Server:

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select datepart(hour, @dt) -- returns 8

Dans SQL Server 2008+, vous pouvez CAST() en tant que temps:

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select CAST(@dt as time) -- returns 08:25:53
25
Taryn

Essayez ceci dans SQL Server 2008:

select *
from some_table t
where convert(time,t.some_datetime_column) = '5pm'

Si vous souhaitez prendre une valeur datetime aléatoire et l'ajuster de manière à ce que le composant heure soit à 17 heures, SQL Server 2008 offre plusieurs possibilités. Vous devez d’abord commencer la journée (par exemple, le 2011-09-30 00: 00: 00.000).

  • Une technique qui fonctionne pour toutes les versions de Microsoft SQL Server ainsi que pour toutes les versions de Sybase consiste à utiliser convert/3 pour convertir la valeur datetime en un varchar dépourvu de composant temporel, puis de nouveau en une valeur datetime:

    select convert(datetime,convert(varchar,current_timestamp,112),112)
    

Ce qui précède vous donne le début de la journée pour le jour actuel.

  • Dans SQL Server 2008, cependant, vous pouvez dire quelque chose comme ceci:

    select start_of_day =               t.some_datetime_column
                        - convert(time, t.some_datetime_column ) ,
    from some_table t
    

    ce qui est probablement plus rapide.

Une fois que vous avez commencé, il est facile de se rendre à 17 heures. Ajoutez simplement 17 heures à votre valeur de début de journée:

select five_pm = dateadd(hour,17, t.some_datetime_column
                   - convert(time,t.some_datetime_column)
                   )
from some_table t
7
Nicholas Carey

Je sais que c’est une vieille question, mais puisque l’autre répond à tous 

  • renvoyer des chaînes (plutôt que des dates-heures),
  • compter sur la représentation interne des dates (conversion en float, int et retour) ou
  • nécessite SQL Server 2008 ou une version ultérieure,

J'ai pensé ajouter une option "pure" qui ne nécessite que des opérations datetime et fonctionne avec SQL Server 2005+:

SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)

Ceci calcule la différence (en jours entiers) entre la date zéro (1900-01-01) et la date donnée et soustrait ensuite ce nombre de jours de la date donnée, mettant ainsi sa composante de date à zéro.

7
Heinzi

"Pour mon projet, je dois renvoyer des données dont l'horodatage est 17 heures du champ DateTime, peu importe la date."

Donc, je pense que ce que vous vouliez dire, c'est que vous aviez besoin de la date et non de l'heure. Vous pouvez faire quelque chose comme ceci pour obtenir une date avec 5:00 comme heure:

SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'
2
Jim

Cela devrait enlever la partie de la date:

select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate()

et renvoyer une date/heure avec une date par défaut de 1900-01-01.

2
RYUX123

sélectionnez la distribution (getdate () comme heure (0))

retourne par exemple: - 15:19:43

remplacez getdate () par la date et l'heure que vous voulez extraire!

1
Glen Richmond

vous pouvez utiliser CONVERT(TIME,GETDATE()) dans ce cas:

INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))

ou si vous voulez l'imprimer ou le retourner, utilisez-le comme ceci:

DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
1
Reza Paidar

Notez qu'à partir de MS SQL 2012, vous pouvez utiliser FORMAT(value,'format').

par exemple. WHERE FORMAT(YourDatetime,'HH:mm') = '17:00'

1
AjV Jsy
SELECT DISTINCT   
                 CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108)  
FROM  
      CONSOLIDATED_LIST AS A  
WHERE   
      CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108) BETWEEN '15:00:00' AND '15:45:00'
0
p.ajay