SQL语句中的字段时间怎样和现在时间作比较

数据库中有一张用户表users,里面有个字段endtime,记录着用户的到期日期,比如到期日期是
2012—11—25,在一个用户信息管理页面中,我想查找还有30天就到期的用户,我是这样尝试的,select * from users where endtime - datatime.now < 30;程序运行错误,请问这个SQL 语句该怎么写,或者说怎样实现这个功能,敬请各位老师赐教。我用的是c#语言。

2 SQL Server 获得当前日期的函数: GETDATE() GETUTCDATE() CURRENT_TIMESTAMP

GETDATE(): 返回当前系统日期和时间

GETUTCDATE(): 使用 DT_DBTIMESTAMP 格式返回以 UTC 时间(通用协调时间或格林尼治标准时间)表示的系统当前日期

CURRENT_TIMESTAMP: 返回当前日期的和时间,等价于GETDATE()函数.注此函数不带括号"()"
-----------------------------------------------------------------------------------------------------------------
--- SELECt GETDATE() AS [GETDATE],CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP],GETUTCDATE() AS [GETUTCDATE] ---

--- 返回结果:GETDATE CURRENT_TIMESTAMP GETUTCDATE ---
--- 2008-12-04 18:28:50.437 2008-12-04 18:28:50.437 2008-12-04 10:28:50.437 ---
-----------------------------------------------------------------------------------------------------------------

4 SQL Server 日期的加减函数: DATEDIFF DATEADD

DATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数, 语法:DATEDIFF ( datepart , startdate , enddate ) 用 enddate 减去 startdate
注:datepart 指定应在日期的哪一部分计算差额的参数,其日期相减时,只关注边界值,例SELECT DATEDIFF(YEAR,'2008-12-31','2009-1-1') 返回 1

DATEADD : 返回给指定日期加上一个时间间隔后的新 datetime 值。 语法:DATEADD (datepart , number, date )
注: datepart 指定要返回新值的日期的组成部分
number 使用来增加 datepart 的值。正数表示增加,负数表示减少,如果是小数则忽略小数部分,且不做四舍五入。追问

我这样做了,

select * from busers where DateDiff(day,endtime,getdate()) < 30,但还是报错,说,找不到GETGATE()。

追答

2005中应该是有getdate()函数的。
select getdate() 你看看能不能通过

参考资料:http://hi.baidu.com/myloveral/blog/item/e9f1249b7a6e4ea3c8eaf455.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-10
你用的是什么数据库?一般数据库都 有相应的日期函数。像sql server2000里面有datadiff 函数。追问

我用的是SQL 2005

追答

sql 2005里面应该有datediff函数的

第2个回答  2011-04-11
我不知道怎么改,但是我知道你是哪错了
endtime只datetime型的,而30是int型的,两者不能比较