SQL Server从datetime中删除毫秒

时间:2010-07-20 03:41:18

标签: sql-server tsql

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

我希望不会给我任何结果...除了我的日期时间为2010-07-20 03:21:52.577

的记录

如何使查询忽略毫秒?

12 个答案:

答案 0 :(得分:78)

你必须弄清楚日期的毫秒部分并在比较之前将其减去,如下所示:

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

答案 1 :(得分:16)

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

你必须在比较之前修剪毫秒,这将在许多行上缓慢

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

  • 使用上面的表达式创建了一个计算列,以与
  • 进行比较
  • 删除插入/更新时的毫秒数以避免读取开销
  • 如果是SQL Server 2008,请使用datetime2(0)

答案 2 :(得分:12)

尝试:

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

或者,如果您的日期是实际日期时间值:

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

转换为样式120会缩短毫秒......

答案 3 :(得分:9)

对于这个特定的查询,当你可以从下一个更高的秒开始询问值时,为什么要为每一行进行昂贵的函数调用:

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

答案 4 :(得分:9)

如果您使用的是SQL Server(从2008年开始),请选择以下选项之一:

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

答案 5 :(得分:6)

使用 CAST 以下参数:

日期

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

答案 6 :(得分:2)

有多种方法可以做到:

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 

少一个函数调用,但如果日期相距太远,你必须小心溢出最大整数。

答案 7 :(得分:1)

请尝试此

select substring('12:20:19.8470000',1,(CHARINDEX('.','12:20:19.8470000',1)-1))


(No column name)
12:20:19

答案 8 :(得分:1)

使用'Smalldatetime'数据类型

select convert(smalldatetime, getdate())

将获取

2015-01-08 15:27:00

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

可能这会有所帮助.. SELECT [Datetime] = CAST('20120228'AS smalldatetime)

O / P: 2012-02-28 00:00:00

答案 11 :(得分:-1)

回顾这个例子:

declare @now datetimeoffset = sysdatetimeoffset();
select @now;
-- 1
select convert(datetimeoffset(0), @now, 120);
-- 2
select convert(datetimeoffset, convert(varchar(max), @now, 120));

产生如下输出:

2021-07-30 09:21:37.7000000 +00:00
-- 1
2021-07-30 09:21:38 +00:00
-- 2
2021-07-30 09:21:37.0000000 +00:00

请注意,对于 (1),结果是四舍五入(在这种情况下向上),而对于 (2),结果是截断

因此,如果您想根据问题截断日期(时间)类型值的毫秒数,您必须使用:

select convert(datetimeoffset, convert(varchar(max), @myDateValue, 120));