【问题标题】:how to compare date with GETDATE() in sql server 2008如何在 sql server 2008 中将日期与 GETDATE() 进行比较
【发布时间】:2018-05-22 08:06:41
【问题描述】:

我有一个存储过程,用于将某种信息插入到表'demotable'中,因为我有一个字段loginTime,其中数据类型为dateTime。 我正在使用 GETDATE() 获取当前日期时间,问题是我想比较此 GETDATE() 是否低于上午 9:00,然后将其设为上午 9:00,如果不低于则保持输出不变变化。 - 使用 microsoft sql server 2008。

下面是我的示例存储过程

         //Beg Stored Procedure Contents...


            insert into dbo.demoTable([loginTime],[nStatus]) values(GETDATE(),'1')

         //End

【问题讨论】:

  • Google 是您的朋友。搜索如何执行日期比较非常容易。显然,由于缺少显示的代码,您只是希望有人来为您编写程序,而这不是 Stack Overflow 的目的。
  • 您正在插入数据库,因此在 c# 中使用 DataTime 方法在存储到数据库之前进行转换。您的代码不是存储过程。

标签: c# sql-server sql-server-2008 stored-procedures


【解决方案1】:

此查询将检查当前时间是否在上午 9:00 之前,如果不是,它将保留调用 getdate() 的任何结果。否则,它会变成上午 9:00。

select iif(DATEPART(HOUR, GETDATE()) < 9, 
           dateadd(hh, 9,  DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)),
           getdate())

【讨论】:

  • 我想将时间保持在上午 9:00 或以上,如果低于 9:00 则为上午 9:00,这是什么select iff - 我正在使用 sql server 2008,是否支持IIF?
  • 是的,这就是它的作用。我的回答中有小错字。我应该写if no,但我写了if yes
【解决方案2】:

select CASE when DATEPART(HOUR, GETDATE()) &lt; 9 THEN dateadd(hh, 9, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) ELSE getdate() END

这是我自己找到的解决方案,感谢@CodingYoshi 的提示,SQL Server 2008 不支持 IIF,我们可以使用 CASE

【讨论】:

    【解决方案3】:

    -- 应该在 2008 年及以上工作

    SELECT CASE WHEN DATEPART(HOUR,GETDATE())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多