it-swarm.com.de

Zeitteil eines DateTime-Felds in SQL

Wie kann ich den zeitlichen Teil eines DateTime-Felds in SQL extrahieren? Für mein Projekt muss ich Daten zurückgeben, die einen Zeitstempel von 5:00 Uhr eines DateTime-Felds haben, unabhängig vom Datum

42
ghost_king

Wenn Sie in SQL Server nur den hh:mi benötigen, können Sie Folgendes verwenden:

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)

Beschreibung:

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

Weitere MySQL:

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

SQLFiddle Demo

51
John Woo

Wenn Sie nur die Stunde Ihres Datums wünschen, können Sie DATEPART() - SQL Server verwenden:

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

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

In SQL Server 2008 und älter können Sie CAST() als Uhrzeit verwenden:

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

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

Versuchen Sie dies in SQL Server 2008:

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

Wenn Sie einen zufälligen Datumszeitwert verwenden und ihn so anpassen möchten, dass die Zeitkomponente 5pm ist, gibt es in SQL Server 2008 mehrere Möglichkeiten. Zuerst benötigen Sie einen Tagesbeginn (z. B. 2011-09-30 00: 00: 00.000).

  • Eine Technik, die für alle Versionen von Microsoft SQL Server sowie für alle Versionen von Sybase geeignet ist, ist die Verwendung von convert/3 zum Konvertieren des datetime-Werts in einen varchar, dem eine Zeitkomponente fehlt.

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

Das oben genannte gibt Ihnen den Tagesbeginn für den aktuellen Tag.

  • In SQL Server 2008 können Sie jedoch Folgendes sagen:

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

    das ist wahrscheinlich schneller.

Sobald Sie den Tagesbeginn erreicht haben, ist es einfach, bis 17 Uhr zu kommen. Addieren Sie einfach 17 Stunden zu Ihrem Tagesbeginn:

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

Ich weiß, das ist eine alte Frage, aber da antwortet der andere alles 

  • rückgabe von Strings (anstelle von Datumsangaben),
  • verlassen sich auf die interne Darstellung von Datumsangaben (Konvertierung in Float, Int und zurück) oder
  • erfordern SQL Server 2008 oder höher,

Ich dachte, ich würde eine "pure" -Option hinzufügen, die nur datetime-Operationen erfordert und mit SQL Server 2005+ funktioniert:

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

Dieser berechnet die Differenz (in ganzen Tagen) zwischen dem Datum Null (1900-01-01) und dem angegebenen Datum und zieht dann diese Anzahl von Tagen vom angegebenen Datum ab, wodurch die Datumskomponente auf Null gesetzt wird.

7
Heinzi

"Für mein Projekt muss ich Daten mit einem Zeitstempel eines DateTime-Felds von 5:00 Uhr zurückgeben.

Ich glaube, Sie meinten damit, dass Sie das Datum brauchten, nicht die Zeit. Sie können so etwas tun, um ein Datum mit 5:00 als Uhrzeit zu erhalten:

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

Dies sollte den Datumsteil entfernen:

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

und geben Sie eine Datumszeit mit einem Standarddatum von 1900-01-01 zurück.

2
RYUX123

besetzung wählen (getdate () als Uhrzeit (0))

kehrt zum Beispiel zurück: - 15:19:43

ersetze getdate () durch das Datum, an dem du gerade mal extrahieren möchtest!

1
Glen Richmond

sie können CONVERT(TIME,GETDATE()) in diesem Fall verwenden:

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

oder wenn Sie es ausdrucken oder zurückgeben möchten, verwenden Sie es wie folgt:

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

Beachten Sie, dass Sie ab MS SQL 2012 FORMAT(value,'format') verwenden können.

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