[英]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)
各種黑客:
convert
為僅使用日期部分將日期時間轉換為字符串 substring
來切斷結束 floor
圍繞日期時間 剝去時間,並將其投射到日期:
select cast(left(yourstring, 10) as datetime)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.