Come ottenere l'ora dal formato DateTime in SQL?


182

Voglio ottenere solo l'ora dalla colonna DateTime utilizzando la query SQL utilizzando SQL Server 2005 e 2008 Output predefinito:

AttDate                   
==
2011-02-09 13:09:00    
2011-02-09 14:10:00    

Vorrei questo risultato:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10

cerca il metodo to_char in sql. puoi specificare il formato e ottenere l'output desiderato
Naveen Babu,

1
select convert (varchar (10), getdate (), 108)
rahularyansharma,

Potrebbe essere SELECT CONVERT(VARCHAR(8),GETDATE(),108)per SQL Server
V4Vendetta

Risposte:


342

SQL Server 2008:

SELECT cast(AttDate as time) [time]
FROM yourtable

Versioni precedenti:

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable

34

Supponendo il server SQL

SELECT CONVERT(VARCHAR(8),GETDATE(),108)


Funziona solo su getdate () dove come quando passo select convert (varchar (8), '2011-02-09 13: 09: 00', 108) sta producendo i primi 8 caratteri dalla data. Come risolvere questo problema ?
Aparna,

24

SQL Server 2008+ ha un tipo di dati "time"

SELECT 
    ..., CAST(MyDateTimeCol AS time)
FROM
   ...

Per le versioni precedenti, senza conversioni varchar

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...

perché non usi SELECT CONVERT (VARCHAR (8), GETDATE (), 108) AS HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) AS DateSono presenti problemi di prestazioni?
rahularyansharma,

2
@rahularyansharma: non uso la conversione varchar per le date, se necessario
gbn,

signore, voglio sapere se c'è un calo delle prestazioni se usiamo questo invece della tua soluzione?
rahularyansharma,

1
@rahularyansharma: puoi metterti alla prova in base a questo stackoverflow.com/questions/133081/…
gbn

1
Per chiunque non segua, 0rappresenta la data minima 1900-01-01. Quindi questo ottiene il numero (negativo) di giorni tra il valore della colonna e 0, quindi aggiunge quei giorni negativi al valore della colonna a cui "azzera" la porzione di data 1900-01-01e ti rimane solo il tempo.
xr280xr,

13

Il modo più semplice per ottenere il tempo dal datetime senza stack di millisecondi è:

SELECT convert(time(0),getDate())

10

Prova ad usare questo

  • Date to Time

    select cast(getdate() as time(0))
  • Time to TinyTime

    select cast(orig_time as time(0))

5

Prova questo:

select  convert(nvarchar,CAST(getdate()as time),100)


3

select AttDate,convert(char(5), AttDate, 108) [Time] from yourTableName


3
select cast (as time(0))

sarebbe una buona clausola. Per esempio:

(select cast(start_date as time(0))) AS 'START TIME'

3

Uso spesso questo script per ottenere Time da DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE

perché ottengo 9 davanti al tempo .. Risultato: 9 23:21
Sayed Muhammad Idrees

2

Per ottenere il tempo dal datetime, possiamo usare

SELECT CONVERT(VARCHAR(20), GETDATE(), 114)

2

Se vuoi uscire con qualcosa in questo stile: 23 ottobre 2013 10:30

Usa questo

SELECT CONVERT(NVARCHAR(30),getdate(), 100)

convert() Il metodo accetta 3 parametri

  1. tipo di dati
  2. Colonna / Valore
  3. Stile: gli stili disponibili vanno da 100 a 114. È possibile scegliere nel raggio di azione. Scegli uno per uno per cambiare il formato della data.

2

Ottieni la data del server

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) FROM TABLENAME WHERE ...

o

Se è memorizzato nella tabella

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), datename, 100), 7)) FROM TABLENAME WHERE ...

Risultato:

11:41


1
select convert(char(5), tbl_CustomerBooking.CheckInTime, 108) AS [time]
from tbl_CustomerBooking

1

su MSSQL2012 o successivo

cast(dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) as Time(0))

...o...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )

1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

Personalmente, preferisco TRY_CONVERT () a CONVERT (). La differenza principale: se il cast fallisce, TRY_CONVERT () restituisce NULL mentre CONVERT () genera un errore.


-1

select substr(to_char(colUmn_name, 'DD/MM/RRRR HH:MM:SS'),11,19) from table_name;

Uscita: da

05:11:26
05:11:24
05:11:24

Non funziona genera errori'to_char' is not a recognized built-in function name.
captainsac l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.