Jak uzyskać czas z formatu DateTime w SQL?

181

Chcę uzyskać tylko godzinę z kolumny DateTime przy użyciu zapytania SQL przy użyciu SQL Server 2005 i 2008 Domyślne dane wyjściowe:

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

Chciałbym ten wynik:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10
Jig12
źródło
wyszukaj metodę to_char w sql. możesz określić format i uzyskać żądany wynik
Naveen Babu,
1
select convert (varchar (10), getdate (), 108)
rahularyansharma
Może to być SELECT CONVERT(VARCHAR(8),GETDATE(),108)dla serwera SQL
V4Vendetta

Odpowiedzi:

341

SQL Server 2008:

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

Wcześniejsze wersje:

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable
t-clausen.dk
źródło
34

Zakładając serwer Sql

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

V4Vendetta
źródło
Działa tylko w getdate (), gdzie kiedy przechodzę wybierz konwersję (varchar (8), '2011-02-09 13: 09: 00', 108) produkuje pierwsze 8 znaków od daty. Jak to naprawić ?
Aparna
24

SQL Server 2008+ ma typ danych „czasowy”

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

W przypadku starszych wersji bez konwersji varchar

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...
gbn
źródło
dlaczego nie korzystasz z tej instrukcji SELECT CONVERT (VARCHAR (8), GETDATE (), 108) AS HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) AS DateOnly Czy jest jakiś problem z wydajnością?
rahularyansharma
2
@rahularyansharma: W razie potrzeby nie używam konwersji varchar dla dat
gbn 10.10.11
proszę pana, chcę wiedzieć, czy spadnie wydajność, jeśli użyjemy tego zamiast waszego rozwiązania?
rahularyansharma
1
@rahularyansharma: możesz sprawdzić się na podstawie stackoverflow.com/questions/133081/…
gbn 10.10.11
1
Dla każdego, kto nie obserwuje, 0oznacza datę minimalną 1900-01-01. W ten sposób otrzymujemy (ujemną) liczbę dni między wartością kolumny a 0, a następnie dodajemy te ujemne dni do wartości kolumny, która „zeruje” część daty 1900-01-01i pozostaje ci tylko czas.
xr280xr
13

Najprostszym sposobem na uzyskanie czasu z datetime bez stosu milisekund jest:

SELECT convert(time(0),getDate())
BigDaddy
źródło
10

Spróbuj użyć tego

  • Data do godziny

    select cast(getdate() as time(0))
  • Czas na TinyTime

    select cast(orig_time as time(0))
Cantarero
źródło
5

Spróbuj tego:

select  convert(nvarchar,CAST(getdate()as time),100)
Balaji N
źródło
5

Spróbuj, to zadziała:

CONVERT(VARCHAR(8),DATETIME,114)

W celach informacyjnych .

użytkownik8498521
źródło
3

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

sagar Shah
źródło
3
select cast (as time(0))

byłoby dobrą klauzulą. Na przykład:

(select cast(start_date as time(0))) AS 'START TIME'
Metin Özsoy
źródło
3

Często używam tego skryptu, aby uzyskać czas z DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE
ChinoNoypi
źródło
dlaczego dostaję 9 przed czasem .. Wynik: 21 23:21
Sayed Muhammad Idrees
2

Aby uzyskać czas z datetime, możemy użyć

SELECT CONVERT(VARCHAR(20), GETDATE(), 114)
thevan
źródło
2

Jeśli chcesz umówić się na randkę w tym stylu: 23 października 2013 10:30

Użyj tego

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

convert() metoda przyjmuje 3 parametry

  1. typ danych
  2. Kolumna / wartość
  3. Styl: Dostępne style to od 100 do 114. Możesz wybierać w zakresie od. Wybierz jeden po drugim, aby zmienić format daty.
Arif Ansari
źródło
2

Uzyskaj datę serwera

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

lub

Jeśli jest przechowywany w tabeli

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

Wynik:

11:41

Luis Gerardo López Salazar
źródło
1
select convert(char(5), tbl_CustomerBooking.CheckInTime, 108) AS [time]
from tbl_CustomerBooking
JIYAUL MUSTAPHA
źródło
1

na MSSQL2012 lub nowszym

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

...lub...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )
aVB.NetCoder
źródło
1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

Osobiście wolę TRY_CONVERT () niż CONVERT (). Główna różnica: jeśli rzutowanie nie powiedzie się, TRY_CONVERT () zwraca NULL, podczas gdy CONVERT () zgłasza błąd.

jinhr
źródło
-1

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

Wyjście: z

05:11:26
05:11:24
05:11:24
użytkownik7131338
źródło
Nie działa daje błąd'to_char' is not a recognized built-in function name.
captainsac