I have a string '2009-06-24 09:52:43.000', which I need to insert to a DateTime column of a table.
But I don't care about the time, just want to insert it as 2009-06-24 00:00:00.000
How can I do that in T-SQL?
For SQL Server 2005 and below:
CONVERT(varchar(8), @ParamDate, 112) -- Supported way
CAST(FLOOR(CAST(@ParamDate AS float)) AS DATETIME) -- Unsupported way
For SQL Server 2008 and above:
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)
James is correct. If you're starting off with a string, and the format will always be what you say it is, then you keep it simple and efficient. Use LEFT( @StrDate, 10)
and CONVERT
that to your datetime value. Done.
If your input string could be any valid date/time format, then you have to use CONVERT(datetime, @StrDate)
first. After that you go with what Bing just said to strip off the time part.
An enhancement to the unsupported version: I am not sure if this may effect any performance. getdate()
is an input timestamp in my query.
select cast(cast(getdate() as DATE) as DATETIME)
cast it to a date, and then you can use CONVERT to get just the date.
INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)
If you will always have the date in the same format, ie yyyy-MM-DD you can grab the first 10 characters if the value and insert that which is the equivelant of 00:00:00.0000 time for that date.
select left('2009-12-32 4:32:00',10)
This is a very efficient way to do this as it does't require converting data types HOWEVER, it does require that the date will always be formatted with a four digit year and two digit day & month.
我发现铸造作为日期,然后到日期时间非常有效和直观。
SELECT CAST(CAST(GETDATE() as date) as datetime)
Probably a cleaner and more portable way to do this, but my years old idiom is:
insert into tbl (date_column)
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101)
A variety of hacks:
convert
to convert your datetime to a string using just the date portion substring
to chop off the end floor
剥去时间,并将其投射到日期:
select cast(left(yourstring, 10) as datetime)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.