【问题标题】:SQL query in SQL SERVER 2005 - Comparing DatesSQL SERVER 2005 中的 SQL 查询 - 比较日期
【发布时间】:2010-12-04 01:22:26
【问题描述】:

我很难做这个查询。 我想比较查询中的日期,我的数据库中的日期采用以下格式:
(MM/DD/YYYY HH:MM:SS AM)
我想将此日期与明天的日期进行比较,今天加一。
我的问题是:

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

谢谢!! =D

编辑:数据库中的日期是 VarChar =S

【问题讨论】:

  • 存储为 varchar?还是您在客户端工具中看到的这种格式?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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 中剥离时间:这会影响性能并禁止使用索引等

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

    编辑:

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

    2009 年 10 月 6 日

    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月底会失败……

    【讨论】:

      【解决方案3】:

      我认为您的日期最有可能采用 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 的内容

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-08-29
          • 1970-01-01
          • 2015-08-28
          • 2013-09-16
          • 2011-09-01
          • 2013-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多