查找数据表里不超过当前时间30分钟的所有数据

whxlcjl 2009-12-05 01:23:07
如题。

我写了这样一句代码:

SELECT id FROM user_remind WHERE datediff(n,r_time, GETDATE()) < 30

但是它把所有超过当前时间的记录都查找了。。应该怎么改??
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
whxlcjl 2009-12-05
  • 打赏
  • 举报
回复
哦,,可以了,,原来是我搞错了。。。谢谢各位。。。。
jiangshun 2009-12-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 josy 的回复:]
SQL codeSELECT idFROM user_remindWHEREabs(datediff(n,r_time,GETDATE()))<30
[/Quote]

up
whxlcjl 2009-12-05
  • 打赏
  • 举报
回复
还是不行呀,跟之前的一样,,
这样吧,我把代码贴出来大家帮帮忙:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go





-- 存储过程每隔 30 秒钟运行一次。
ALTER procedure [dbo].[usp_daemon_mail]
as
set nocount on

while 1=1
begin
-- 扫描 user_msg 表中的记录,取出满足时间条件的用户邮箱。
-------------------------------------------------------------
declare @r_id varchar(50)
declare @r_to varchar(50)
declare @r_body varchar(max)
declare @r_name varchar(50)
declare @r_delete varchar(1000)


declare db_r_id cursor for --必需聲明在查詢的前面

SELECT id FROM user_remind WHERE r_time <= dateadd(mi,30,GETDATE())
--abs(datediff(n,r_time, GETDATE())) < 30
--datediff(n,r_time, GETDATE()) < 30
--abs(datediff(n,r_time, GETDATE())) < 30
---取到相關信息

--Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47

open db_r_id ---開起取到的信息

fetch next from db_r_id into @r_id ---把第一筆放入@strUNIT_NAME中


while @@fetch_status = 0 ---表示存在本筆資料

BEGIN ----開始循環

-------------------

declare db_to cursor for
select r_email from user_remind where id = ''+@r_id+'' --定义游标,取出收信人E-MAIL

open db_to --打开游标
fetch next from db_to into @r_to --把游标值赋予内部变量。
close db_to --关闭游标

deallocate db_to --删除游标。

declare db_content cursor for
select r_content from user_remind where id = ''+@r_id+'' --定义游标,取出信件内容

open db_content --打开游标
fetch next from db_content into @r_body --把游标值赋予内部变量。
close db_content --关闭游标

deallocate db_content --删除游标。

declare db_r_name cursor for
select r_name from user_remind where id = ''+@r_id+'' --定义游标,取出收信人名。

open db_r_name --打开游标
fetch next from db_r_name into @r_name --把游标值赋予内部变量。
set @r_name = @r_name+ '日程内容提醒'
close db_r_name --关闭游标

deallocate db_r_name --删除游标。

--------------------
--开始发信
------------------------------------------------------
-- 使用 UP_SendMail 存储过程向此邮箱发送邮件。
----------------------------------------------------------
exec UP_SendMail @From='whxlcjl@dyfl.com' --发件人
,@To=@r_to --,@To='13822448136@139.com' --,@To=@r_to --对方邮件地址
,@Subject= @r_name -- ,@Subject='日程内容提醒'--主题
,@Body=@r_body --,@Body='Test'--,@Body=@r_body --内容
,@Server='mail.163.com' --SMTP服务器
,@LogName='ap0706140@163.com' --登录用户名
,@PassWord='123654' --密码
--------------------------------------------------

--发送完成后删除任务。
-------------------------------------------------------
set @r_delete = 'delete from user_remind where id = '''+ @r_id+''''
exec(@r_delete)

------------------------------------------------------

fetch next from db_r_id into @r_id ----進行下次循環


END ----結束循環





-----------------------------------------------------

waitfor delay '00:00:30' --等待30秒

close db_r_id --关闭游标

deallocate db_r_id --删除游标。

end


就是以上代码,可是执行之后,它把我那些所有超过当前时间的数据都给查找出来了。。。
反而,已经过去的时间它却查找不出来。。。。


nianran520 2009-12-05
  • 打赏
  • 举报
回复

SELECT id FROM user_remind WHERE r_time <= dateadd(mi,30,GETDATE())
百年树人 2009-12-05
  • 打赏
  • 举报
回复
SELECT id FROM user_remind 
WHERE abs(datediff(n,r_time, GETDATE())) < 30
whxlcjl 2009-12-05
  • 打赏
  • 举报
回复
以上两条不是只为了防止小于当前时间的数据被检索的吗?

我想让小于当前时间的记录都可以检索出来,而距当前时间还超过30分钟的话,就不检索,,,


百年树人 2009-12-05
  • 打赏
  • 举报
回复
SELECT id FROM user_remind WHERE datediff(n,r_time, GETDATE()) < 30 and datediff(n,r_time, GETDATE())>=0
-狙击手- 2009-12-05
  • 打赏
  • 举报
回复
SELECT id FROM user_remind WHERE datediff(n,r_time, GETDATE()) between 0 and 30

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧