如何在 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()) < 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