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