• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

如何写SQL语句,判断是否间隔超过一个月

bary 2008-04-07 08:35:24
一行语句有字段inputtime为datetime类型,如何判断该字段是否与当前时间间隔超过一个月?
...全文
791 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
江湖啊江湖 2012-06-25
手脚~~~~~~~~~~~
回复
conan304 2008-04-07
DATEDIFF
返回跨两个指定日期的日期和时间边界数。

语法
DATEDIFF ( datepart , startdate , enddate )

参数
datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

日期部分 缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms


startdate

是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止
年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two
digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年
份。

有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。

enddate

是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

返回类型
integer

注释
startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。

当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,
最大数是 68 年。

计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数
值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之
间的星期数是 1。

示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
回复
rockyvan 2008-04-07
[Quote=引用楼主 bary 的帖子:]
一行语句有字段inputtime为datetime类型,如何判断该字段是否与当前时间间隔超过一个月?
[/Quote]
2008-02-29 23:59:59 和2008-03-01 00:00:00 從時間上來說只相差1秒,從天數上來說相差1天,從月份上來說相差一個月.
樓主的意思應該是按天數來計算.正如上面說的,一個月可能有28/29/30/31天.
如何取捨這個要根據樓主的實際需要了.
我認爲取31天最好,如果間隔時間大於31天了,那麽肯定超過一個月了,因爲沒有那個月份天數是大於31天的.
回复
wangxuelid 2008-04-07
一行语句有字段inputtime为datetime类型,如何判断该字段是否与当前时间间隔超过一个月?
--一个月可能有28/29/30/31

datediff(d,'2008/03/01',getdate())>28/29/30/31

回复
dawugui 2008-04-07
select * from tb where datediff(mm,inputtime,getdate()) > 1
or (datediff(mm,inputtime,getdate()) = 1 and datepart(dd,inputtime) <= datepart(dd,getdate()))

回复
wangxuelid 2008-04-07



select datediff(mm,'2008/03/01',getdate())

select datediff(d,'2008/03/01',getdate())
回复
vegaliming 2008-04-07
假设 inputtime为 2008-02-08 10:30:00

那么使用

 Datediff(MM,inputtime,GetDate())>=1 


,这个函数的返回值就是两个日期的月差值,由第一个参数决定。当返回值大于1了~~那就当然是超过一个月咯~~呵呵~
回复
wzy_love_sly 2008-04-07
select * from tbname where datediff(dd,'2008-03-20',getdate())>30   天
select * from tbname where datediff(mm,'2008-04-20',getdate())>0 月
回复
areswang 2008-04-07
datediff(mm,inputtime,getdate())>=1
回复
ojuju10 2008-04-07

datediff(mm,inputtime,getdate())>=1

回复
十一月猪 2008-04-07
走过 路过
datediff
回复
-狙击手- 2008-04-07
datediff(mm,inputtime,getdate())>=1
回复
pengxuan 2008-04-07
select * from t where datediff(dd,inputtime,getdate())>30
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-07 08:35
社区公告
暂无公告