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

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

34

Zakładając serwer Sql

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


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
   ...

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())

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))




3
select cast (as time(0))

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

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

3

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

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

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)

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.

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


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

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) )

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.


-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

Nie działa daje błąd'to_char' is not a recognized built-in function name.
captainsac
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.