select *
from table
where date > '2010-07-20 03:21:52'
我希望不会给我任何结果...除了我的日期时间为2010-07-20 03:21:52.577
如何使查询忽略毫秒?
答案 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'
你必须在比较之前修剪毫秒,这将在许多行上缓慢
做其中一项来解决这个问题:
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年开始),请选择以下选项之一:
答案 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));