risposta-alla-domanda-sullo-sviluppo-web-bd.com

Parte temporale di un campo DateTime in SQL

Come potrei essere in grado di estrarre la parte temporale di un campo DateTime in SQL? Per il mio progetto devo restituire i dati che hanno un timestamp di 5pm di un campo DateTime, indipendentemente dalla data

42
ghost_king

In SQL Server se è necessario solo hh:mi, è possibile utilizzare:

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ó

То вернет только время

Для SQL Server:

SELECT convert(varchar(8), getdate(), 108)

Объяснение:

getDate() показывает текущую дату и время.
108 форматирует/дает нам необходимую часть, то есть время в этом случае.
varchar(8) дает нам количество символов из этой части.
[. .____] как:
Если вы написали varchar(7) там, он даст вам 00:00:0
Если вы написали varchar(6) там, он даст вам 00:00:
Если вы написали varchar(15) там, он все равно даст вам 00:00:00, потому что он выводит только часть времени. SQLFiddle Demo

Для MySQL:

SELECT DATE_FORMAT(NOW(), '%H:%i:%s')

Demo di SQLFiddle

51
John Woo

Se si desidera solo l'ora del proprio datetime, è possibile utilizzare DATEPART() - SQL Server:

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

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

In SQL Server 2008+ è possibile CAST() come orario:

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

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

Prova questo in SQL Server 2008:

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

Se si desidera prendere un valore datetime casuale e regolarlo in modo che il componente orario sia 5pm, in SQL Server 2008 esistono diversi modi. Innanzitutto è necessario iniziare la giornata (ad es., 2011-09-30 00: 00: 00.000).

  • Una tecnica che funziona per tutte le versioni di Microsoft SQL Server e tutte le versioni di Sybase consiste nell'utilizzare convert/3 per convertire il valore datetime in un varchar che manca di un componente time e quindi di tornare in un valore datetime:

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

Quanto sopra ti dà inizio giornata per il giorno corrente.

  • In SQL Server 2008, però, puoi dire qualcosa del genere:

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

    che è probabilmente più veloce.

Una volta che hai inizio la giornata, arrivare alle 17 è facile. Aggiungi solo 17 ore al valore di inizio giornata:

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

So che questa è una vecchia domanda, ma poiché l'altra risponde a tutti 

  • restituire stringhe (anziché data/ora),
  • fare affidamento sulla rappresentazione interna delle date (conversione in float, int e back) o
  • richiede SQL Server 2008 o successivo,

Ho pensato di aggiungere un'opzione "pura" che richiede solo operazioni datetime e funziona con SQL Server 2005+:

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

Questo calcola la differenza (in giorni interi) tra la data zero (1900-01-01) e la data specificata e quindi sottrae quel numero di giorni dalla data specificata, impostando quindi il componente della data su zero.

7
Heinzi

"Per il mio progetto, devo restituire i dati che hanno un timestamp di 17:00 di un campo DateTime, indipendentemente dalla data."

Quindi penso che volevi dire che avevi bisogno della data, non del tempo. Puoi fare qualcosa di simile per ottenere una data con le 5:00 come ora:

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

Questo dovrebbe togliere la parte della data:

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

e restituire un datetime con una data predefinita del 1900-01-01.

2
RYUX123

seleziona cast (getdate () come orario (0))

ritorna per esempio: - 15:19:43

sostituisci getdate () con la data in cui desideri estrarre solo il tempo!

1
Glen Richmond

puoi usare CONVERT(TIME,GETDATE()) in questo caso:

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

o se vuoi stamparlo o restituirlo, usa questo modo:

DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt
1
Reza Paidar
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