如何仅将日期时间转换为日期(时间设置为00:00:00.000)

时间:2009-06-24 20:04:33

标签: sql sql-server sql-server-2005 tsql

我有一个字符串'2009-06-24 09:52:43.000',我需要将其插入表格的DateTime列。

但我不关心时间,只想插入2009-06-24 00:00:00.000

我怎样才能在T-SQL中做到这一点?

11 个答案:

答案 0 :(得分:13)

对于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)

答案 1 :(得分:10)

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

答案 2 :(得分:6)

SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

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

答案 3 :(得分:2)

詹姆斯是对的。如果您从一个字符串开始,并且格式将始终是您所说的,那么您可以保持简单高效。将LEFT( @StrDate, 10)CONVERT用于日期时间值。完成。

如果您的输入字符串可能是任何有效的日期/时间格式,那么您必须先使用CONVERT(datetime, @StrDate)。在那之后,你会选择Bing刚才所说的去掉时间部分。

答案 4 :(得分:2)

对不受支持的版本的增强: 我不确定这是否会影响任何表现。 getdate()是我的查询中的输入时间戳。

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

答案 5 :(得分:1)

将它投射到某个日期,然后您可以使用CONVERT来获取日期。

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

答案 6 :(得分:0)

这可能是一种更干净,更便携的方式,但我多年的习语是:

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

答案 7 :(得分:0)

如果您将始终使用相同格式的日期,即yyyy-MM-DD,您可以获取前10个字符(如果值)并插入该日期00:00:00.0000的等效时间。

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

这是一种非常有效的方法,因为它不需要转换数据类型但是它确实需要将日期格式化为四位数年份和两位数日期&一个月。

答案 8 :(得分:0)

各种黑客:

  • 将您的字符串转换为日期时间,然后使用可选的“style”参数再次返回convert,将日期时间转换为仅使用日期部分的字符串
  • 使用substring来结束
  • 使用floor
  • 围绕日期时间

答案 9 :(得分:0)

我发现铸造为日期,然后到日期时间非常高效和直观。

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

答案 10 :(得分:-2)

剥去时间,并把它投到日期:

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