繁体   English   中英

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

[英]SQL query in SQL SERVER 2005 - Comparing Dates

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

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

谢谢!! = d

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

声明明天的日期: 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))

假设列的datetime数据类型

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 <= MyCol <2009-10-07 00:00:00

你不会从MyCol中剥离时间:这会影响性能并禁止索引使用等

从datetime问题中删除时间的效率 ,这就是我使用这种格式并避免varchar转换的原因...

编辑:

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

10/06/2009 <= MyCol <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月底失败......

我认为您的日期最有可能是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日期,那么SO上有很多内容

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM