如何在 sql server 2008 中将日期与 GETDATE() 进行比较

Posted

技术标签:

【中文标题】如何在 sql server 2008 中将日期与 GETDATE() 进行比较【英文标题】:how to compare date with GETDATE() in sql server 2008 【发布时间】: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 方法在存储到数据库之前进行转换。您的代码不是存储过程。 【参考方案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())

【讨论】:

以上是关于如何在 sql server 2008 中将日期与 GETDATE() 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中将纪元时间与 24 小时前进行比较?

如何在 SQL Server 2008 中将行切换到列,反之亦然

如何在 Sql Server 2008 R2 中将列转换为行?

我们如何在 C# 中将访问数据库(.mdb)导入 sql server 2008

如何在 sql server 2008r2 中将行名更改为列名

在 SQL Server 2008 中将查询结果导出到 .csv 文件