SQL SERVER 2005中的SQL查询 - 比较日期

时间:2009-10-05 19:09:11

标签: sql sql-server sql-server-2005 tsql date

我很难做这个查询。 我想比较查询中的日期,我的数据库中的日期是这种格式:
(MM / DD / YYYY HH:MM:SS AM)
我想比较这个日期和今天的明天,加上一个 我的问题是:

如何在sql server中声明明天的日期?
你会如何比较这两个日期?

谢谢!! = d

编辑:DB中的日期是VarChar = S

4 个答案:

答案 0 :(得分:5)

宣布明天的日期:DATEADD(dd,1,getdate())

比较日期:

WHERE column >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 102))
    AND column < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 102))

答案 1 :(得分:5)

假设列的日期时间数据类型

WHERE
   MyCol >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1)
   AND
   MyCol < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2)

这个(yyyy-mm-dd)删除了明天测试MyCol的时间成分

2009-10-06 00:00:00&lt; = MyCol&lt; 2009-10-07 00:00:00

您不会从MyCol中删除时间:这会影响性能并禁止索引使用等

Efficiency of remove time from datetime question,这就是我使用这种格式并避免varchar转换的原因......

编辑:

避免隐式转换和字符串匹配

10/06/2009&lt; = MyCol&lt; 10/07/2009

WHERE
   MyCol >= CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1), 101)
   AND
   MyCol < CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2), 101)

当然,它会在12月底失败......

答案 2 :(得分:1)

我认为您的日期最有可能是SQL Server的datetime数据类型,并且您提供的格式只是默认的字符串表示形式。

通常,我使用类似的东西:

SELECT *
FROM tbl
WHERE datecol = CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101))

但是,如果您的日期时间包含时间段,则需要使用以下内容:

SELECT *
FROM tbl
WHERE datecol >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101))
    AND datecol < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 101)) 

您可以使用其他日期算术技巧。如果您查找SQL日期,那么这里有很多东西

答案 3 :(得分:0)

SQL Server允许您声明变量

DECLARE @TomorrowsDate DateTime

您可以将其设置为当前日期和时间

SET @TomorrowsDate = DATEADD (Day, 0, GETDATE())

明天的日期(没有时间)

SET @TomorrowsDate = DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101))

在具有列的查询中使用它而不声明变量

SELECT Column1, Column2
FROM YourTableName
WHERE DateColumn BETWEEN DATEADD (Day, 0, CONVERT (VARCHAR, GETDATE(), 101)) 
    AND DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101))