wake-up-neo.net

Wie konvertiert man nur Datum/Uhrzeit in Datum (mit einer Uhrzeit von 00: 00: 00.000)

Ich habe eine Zeichenfolge '2009-06-24 09: 52: 43.000', die ich in eine DateTime-Spalte einer Tabelle einfügen muss.

Aber mir ist die Zeit egal, ich möchte sie nur als 2009-06-24 00: 00: 00.000 einfügen

Wie kann ich das in T-SQL machen?

11
Saobi

Für SQL Server 2005 und darunter:

CONVERT(varchar(8), @ParamDate, 112)    -- Supported way

CAST(FLOOR(CAST(@ParamDate AS float)) AS DATETIME)   -- Unsupported way

Für SQL Server 2008 und höher:

CAST(@ParamDate AS DATE)
13
GSerg
declare @originalDate datetime
select @originalDate = '2009-06-24 09:52:43.000'

declare @withoutTime datetime
select @withoutTime = dateadd(d, datediff(d, 0, @originalDate), 0)

select @withoutTime
10
Kevin Newman
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)
6
DBAndrew

Eine Verbesserung der nicht unterstützten Version: Ich bin mir nicht sicher, ob sich dies auf die Leistung auswirkt. getdate() ist ein Eingabezeitstempel in meiner Abfrage.

select cast(cast(getdate() as DATE) as DATETIME)

2
sanBV

James ist richtig. Wenn Sie mit einer Zeichenfolge beginnen und das Format immer dem entspricht, was Sie sagen, halten Sie es einfach und effizient. Verwenden Sie LEFT( @StrDate, 10) und CONVERT für Ihren datetime-Wert. Erledigt.

Wenn Ihre Eingabezeichenfolge das Format any valid date/time haben könnte, müssen Sie zuerst CONVERT(datetime, @StrDate) verwenden. Danach gehst du mit dem, was Bing gerade gesagt hat, um den Teil der Zeit abzustreifen.

2
TimF

cast es auf ein Datum, und dann können Sie CONVERT verwenden, um nur das Datum zu erhalten.

INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)
1
Scott Ivey

Wahrscheinlich eine sauberere und tragbarere Methode, aber meine jahrelange Redewendung lautet:

insert into tbl (date_column)
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101)
0
Eric H.

Wenn Sie das Datum immer im gleichen Format haben, d. H. JJJJ-MM-TT, können Sie die ersten 10 Zeichen abrufen, wenn der Wert gleich der 00: 00: 00.0000-Zeit für dieses Datum ist.

select left('2009-12-32 4:32:00',10)

Dies ist eine sehr effiziente Methode, da keine Konvertierung der Datentypen erforderlich ist. Das Datum muss jedoch immer mit einem vierstelligen Jahr und einem zweistelligen Tag und Monat formatiert sein.

0

Eine Vielzahl von Hacks:

  • Konvertieren Sie Ihre Zeichenfolge in eine Datums- und Uhrzeitangabe, und verwenden Sie dann den optionalen Parameter "style" erneut für convert, um Ihre Datums- und Uhrzeitangabe in eine Zeichenfolge zu konvertieren, die nur den Datumsanteil enthält
  • benutze substring um das Ende abzuschneiden
  • rund um die datetime mit floor
0
Jeremy Smyth

Ich habe festgestellt, dass das Casting als Datum und dann als Datumszeit sehr effizient und intuitiv ist.

 SELECT CAST(CAST(GETDATE() as date) as datetime)
0
Tyler Facker