我在字符串中有日期值,如下所示我如何查询日期。 这就是我需要查询evtdate的方法是nvarchar并且具有这样的日期值 2013-07-18 06:30:30.843000000
Declare @yesterday datetime - dateadd(day,diff(day,1,getdate(),0)
select count(*) from tbl1
where evtdate >= dateadd(hour,10,@yesterday)
OR
select count(*) from tbl1
where evtdate >- dateadd(day,'20010102',getdate()-2),'2001-01-01T10:00:00')
答案 0 :(得分:1)
我假设您想要在24小时内计算行数,从昨天上午10点开始计算,直到今天上午10点(但不包括)。
DECLARE @yesterday DATETIME = DATEADD(DAY, DATEDIFF(DAY,1,GETDATE()),0);
SELECT COUNT(*) FROM dbo.tbl1
WHERE CONVERT(DATETIME, evtdate) >= DATEADD(HOUR, 10, @yesterday)
AND CONVERT(DATETIME, evtdate) < DATEADD(HOUR, 34, @yesterday);
我强烈建议您将evtdate
从nvarchar
更改为datetime
(如果此查询模式很常见,请考虑将其编入索引)。该列完全没有任何商业nvarchar
- varchar
会很糟糕,但nvarchar
不仅会丢失内置验证和日期/时间方法,而是存储每个字符都有两个字节,即使datetime
永远不会有任何需要Unicode的字符。您目前如何阻止某人在该列中存储'floob'
或'Jimmy Hoffa'
?