在查询中将nvarchar转换为日期

时间:2013-08-13 00:30:22

标签: sql-server-2008-r2

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

1 个答案:

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

我强烈建议您将evtdatenvarchar更改为datetime(如果此查询模式很常见,请考虑将其编入索引)。该列完全没有任何商业nvarchar - varchar会很糟糕,但nvarchar不仅会丢失内置验证和日期/时间方法,而是存储每个字符都有两个字节,即使datetime永远不会有任何需要Unicode的字符。您目前如何阻止某人在该列中存储'floob''Jimmy Hoffa'