SQL Server从date时间中删除毫秒

select * from table where date > '2010-07-20 03:21:52' 

我希望不会给我任何结果…除了我得到一个logging2010-07-20 03:21:52.577

我怎样才能使查询忽略毫秒?

您只需要计算出date的毫秒部分,然后在比较之前将其减掉,如下所示:

 select * from table where DATEADD(ms, -DATEPART(ms, date), date) > '2010-07-20 03:21:52' 
 select * from table where DATEADD(ms, DATEDIFF(ms, '20000101', date), '20000101') > '2010-07-20 03:21:52' 

在比较之前,你必须要微调几毫秒,这将在很多行上变慢

做其中之一来解决这个问题:

  • 用上面的expression式创build一个计算列来比较
  • 删除插入/更新毫秒以避免读取开销
  • 如果SQL Server 2008使用datetime2(0)

尝试:

 SELECT * FROM table WHERE datetime > CONVERT(DATETIME, CONVERT(VARCHAR(20), CONVERT(DATETIME, '2010-07-20 03:21:52'), 120)) 

或者如果你的date是一个实际的date时间值:

 DECLARE @date DATETIME SET @date = GETDATE() SELECT CONVERT(DATETIME, CONVERT(VARCHAR(20), @date, 120)) 

转换到样式120切断毫秒…

对于这个特定的查询,为什么要在每一行中进行昂贵的函数调用,而只需要从下一个较高的秒开始请求值:

 select * from table where date >= '2010-07-20 03:21:53' 

如果您正在使用SQL Server(从2008开始),请select下列其中一项:

  • CONVERT(DATETIME2(0),YourDateField)
  • 左(RTRIM(CONVERT(DATETIMEOFFSET,YourDateField)),19)
  • CONVERT(DATETIMEOFFSET(0),YourDateField) – 添加时区偏移量

有多种方法可以做到这一点:

 select 1 where datediff(second, '2010-07-20 03:21:52', '2010-07-20 03:21:52.577') >= 0 

要么

 select * from table where datediff(second, '2010-07-20 03:21:52', date) >= 0 

less一个函数调用,但如果date太远,则必须小心溢出最大整数。

请试试这个

 select substring('12:20:19.8470000',1,(CHARINDEX('.','12:20:19.8470000',1)-1)) (No column name) 12:20:19 

当我使用存储过程从特定的秒钟(以“YYYY-MM-DD HH:TT:SS”格式的参数)查找事件时,另一种方法是设置SQL Server查询以忽略毫秒:

  WHERE ...[Time_stamp] >= CAST(CONCAT(@YYYYMMDDHHTTSS,'.000') as DateTime) AND ...[Time_stamp] <= CAST(CONCAT(@YYYYMMDDHHTTSS,'.999') as DateTime) 

你可以使用类似的东西来忽略分钟和秒钟。

可能是这会帮助.. SELECT [date时间] = CAST('20120228'AS smalldatetime)

o / p:2012-02-28 00:00:00

使用CAST和以下参数:

date

 select Cast('2017-10-11 14:38:50.440' as date) 

产出:2017-10-11

约会时间

 select Cast('2017-10-11 14:38:50.440' as datetime) 

输出:2017-10-11 14:38:50.440

SMALLDATETIME

 select Cast('2017-10-11 14:38:50.440' as smalldatetime) 

输出:2017-10-11 14:39:00

DATETIMEOFFSET

 select Cast('2017-10-11 14:38:50.440' as datetimeoffset) 

输出:2017-10-11 14:38:50.4400000 +00:00

DATETIME2

 select Cast('2017-10-11 14:38:50.440' as datetime2) 

输出:2017-10-11 14:38:50.4400000