0

我在字符串中有日期值,如下所示如何查询日期。这就是我需要查询 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)

或者

select count(*) from tbl1
where evtdate >- dateadd(day,'20010102',getdate()-2),'2001-01-01T10:00:00')
4

1 回答 1

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);

我强烈建议您evtdatenvarcharto更改datetime(如果这种查询模式很常见,请考虑对其进行索引)。该列绝对没有任何业务nvarchar-varchar已经够糟糕了,但是nvarchar您不仅丢失了内置验证和日期/时间方法,而且您为每个字符存储了两个字节,即使 adatetime永远不会有任何字符需要 Unicode。您目前如何防止某人存储'floob''Jimmy Hoffa'在该列中?

于 2013-08-13T01:29:58.220 回答