簡體   English   中英

如何僅將日期時間轉換為日期(時間設置為00:00:00.000)

[英]How to convert datetime to date only (with time set to 00:00:00.000)

我有一個字符串'2009-06-24 09:52:43.000',我需要將其插入到表的DateTime列中。

但是我不關心時間,只想插入它作為2009-06-24 00:00:00.000

我怎么能在T-SQL中做到這一點?

對於SQL Server 2005及更低版本:

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

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

對於SQL Server 2008及更高版本:

CAST(@ParamDate AS DATE)
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
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

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

詹姆斯是對的。 如果您從一個字符串開始,並且格式將始終是您所說的,那么您可以保持簡單高效。 使用LEFT( @StrDate, 10)並將其CONVERT為日期時間值。 完成。

如果您的輸入字符串可以是任何有效的日期/時間格式,那么您必須首先使用CONVERT(datetime, @StrDate) 在那之后,你會選擇Bing剛才所說的去掉時間部分。

對不受支持的版本的增強:我不確定這是否會影響任何性能。 getdate()是我的查詢中的輸入時間戳。

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

將它轉換為日期,然后您可以使用CONVERT來獲取日期。

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

如果您將始終使用相同格式的日期,即yyyy-MM-DD,您可以獲取前10個字符(如果值)並插入該日期00:00:00.0000的等效時間。

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

這是一種非常有效的方法,因為它不需要轉換數據類型,但它確實要求日期始終格式化為四位數年份和兩位數日期和月份。

我發現鑄造作為日期,然后到日期時間非常有效和直觀。

 SELECT CAST(CAST(GETDATE() as date) as datetime)

可能是一個更干凈,更便攜的方式,但我多年的習語是:

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

各種黑客:

  • 將您的字符串轉換為日期時間,然后使用可選的“style”參數再次convert為僅使用日期部分將日期時間轉換為字符串
  • 使用substring來切斷結束
  • 使用floor圍繞日期時間

剝去時間,並將其投射到日期:

select cast(left(yourstring, 10) as datetime)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM