sql时间比较相关的问题

堕落的唐僧 2014-10-16 11:21:58
我有一个视频点播订购页面,分单集订购和包年订购,观看有效期分别为2天和1年。那么数据库中该怎么存储这个有效时间进行判断,时间到了之后自动失效,用户需重新订购。
假设表的字段
id name(用户) productid(产品ID,假设1单集,2包年) time

具体语句怎么操作,求帮助
...全文
146 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
其实,也可以分离出一个订购表,因为一个人可能有多种订购,这样也可以记录历史~~ 然后,可以加个产品类别,可以不只有单集和包年,以后有包月直接往这里面添加类型就可以了
卖水果的net 2014-10-16
  • 打赏
  • 举报
回复
2# 的办法是通用的办法,这么干的人比较多,每个小时检查一次就够了。
xiaodongni 2014-10-16
  • 打赏
  • 举报
回复
你这个TIME 可以直接存储有效期(就是订购日期加上2天或者1列。)然后 定期进行更新。如果有效期<=getdate()就插入到历史表。然后在表里面删除记录。
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
你参考一下,有什么不明白再贴上来
WITH CTE AS(
	SELECT 1'ID','A' 'name',1'productid',CAST('2014-09-09'AS DATETIME)'time'
	UNION ALL SELECT 2,'B',2,'2014-09-09'
)
SELECT
	name
	,CASE productid WHEN 1 THEN (CASE WHEN DATEADD(day,2,[time])<GETDATE() THEN '失效' ELSE '有效' END)
		 WHEN 2 THEN (CASE WHEN DATEADD(year,1,[time])<GETDATE() THEN '失效' ELSE '有效' END) END
FROM
	CTE
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
多谢各位帮忙,有问题再来向大家请教
xiaodongni 2014-10-16
  • 打赏
  • 举报
回复
引用 15 楼 u013794332 的回复:
[quote=引用 14 楼 alimake 的回复:] 他的意思就是及时更新。这个计算列就是及时更新。 比如 一个表有3列COL3是计算列 COL1 COL2 COL3(AS col1+col2) 10 20 30 这样。他是计算列。实际存储的是计算公式COL1+COL2 如果你改变COL1的值为15,COL3及时更新为35。 这样就不用定期更新了。不过这样也会影响表的使用情况。 及时我觉得你这个会员问题。反正都是已一天作为单位的。可以在每天的的24点进行更新。 (update tablename set 是否有效=‘否’ where time<=getdate()) 或者先插入到备份表里面然后直接删除(delete tablename where time<=getdate())
就是每天定时更新一次对伐?[/quote] 用计算列不用每天跟新。他会自己更新。我感觉不用计算列 每天定时更新蛮好的。计算列 对表调用比较频繁。
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
引用 15 楼 u013794332 的回复:
[quote=引用 14 楼 alimake 的回复:] 他的意思就是及时更新。这个计算列就是及时更新。 比如 一个表有3列COL3是计算列 COL1 COL2 COL3(AS col1+col2) 10 20 30 这样。他是计算列。实际存储的是计算公式COL1+COL2 如果你改变COL1的值为15,COL3及时更新为35。 这样就不用定期更新了。不过这样也会影响表的使用情况。 及时我觉得你这个会员问题。反正都是已一天作为单位的。可以在每天的的24点进行更新。 (update tablename set 是否有效=‘否’ where time<=getdate()) 或者先插入到备份表里面然后直接删除(delete tablename where time<=getdate())
就是每天定时更新一次对伐?[/quote]不对,根本不用更新,你查RESULT,它就自己计算好了,失效已否
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
引用 14 楼 alimake 的回复:
他的意思就是及时更新。这个计算列就是及时更新。 比如 一个表有3列COL3是计算列 COL1 COL2 COL3(AS col1+col2) 10 20 30 这样。他是计算列。实际存储的是计算公式COL1+COL2 如果你改变COL1的值为15,COL3及时更新为35。 这样就不用定期更新了。不过这样也会影响表的使用情况。 及时我觉得你这个会员问题。反正都是已一天作为单位的。可以在每天的的24点进行更新。 (update tablename set 是否有效=‘否’ where time<=getdate()) 或者先插入到备份表里面然后直接删除(delete tablename where time<=getdate())
就是每天定时更新一次对伐?
xiaodongni 2014-10-16
  • 打赏
  • 举报
回复
他的意思就是及时更新。这个计算列就是及时更新。 比如 一个表有3列COL3是计算列 COL1 COL2 COL3(AS col1+col2) 10 20 30 这样。他是计算列。实际存储的是计算公式COL1+COL2 如果你改变COL1的值为15,COL3及时更新为35。 这样就不用定期更新了。不过这样也会影响表的使用情况。 及时我觉得你这个会员问题。反正都是已一天作为单位的。可以在每天的的24点进行更新。 (update tablename set 是否有效=‘否’ where time<=getdate()) 或者先插入到备份表里面然后直接删除(delete tablename where time<=getdate())
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
就是,如果用计算列就不需要定时任务了~ 需要查询是否生效,直接查询RESULT列就知道了
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
8楼再改进一下。result 换成计算列,就不需要定期更新了。
CREATE TABLE ... (
    ...,
    result AS CASE WHEN GetDate() < time THEN 1 ELSE 0 END
)
不需要定期更新什么意思?
Tiger_Zhao 2014-10-16
  • 打赏
  • 举报
回复
8楼再改进一下。result 换成计算列,就不需要定期更新了。
CREATE TABLE ... (
...,
result AS CASE WHEN GetDate() < time THEN 1 ELSE 0 END
)
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
UPDATE 订购表 SET RESULT=(CASE WHEN [time]<CONVERT(VARCHAR(10),GETDATE(),120) THEN 0 ELSE 1 END) 你参考一下~~
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
好像可以了,再研究研究
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
假设现在订购表是这样 id name productid time(有效截止时间) result(是否有效,1有效,0无效) 1 a 1 2014-10-18 2 b 1 2014-10-15 3 c 2 2015-10-17 定时任务里面执行UPDATE语句, 分别把a,b,c用户的result更新出1,0,1,该怎么写这个语句
xiaodongni 2014-10-16
  • 打赏
  • 举报
回复
你先getdate()得到当前日期啊(就是客户的下单日期)然后根据他是包月还是包年。算出来他的有效期啊。 把这个有效期存入数据库。 定时任务。就是写个包 定时执行就OK 。
还在加载中灬 2014-10-16
  • 打赏
  • 举报
回复
引用 5 楼 u013794332 的回复:
怎么直接存储有效期(就是加2天和1年),我只会直接存getdate()的时间,还有定期更新是写java定时任务执行吗
直接存有效期, 加2天,可以存 DATEADD(day,2,GETDATE()) 加2天,可以存 DATEADD(year,1,GETDATE()) 定时任务参考这边 http://www.cnblogs.com/peaceshow/archive/2012/07/16/2593934.html
堕落的唐僧 2014-10-16
  • 打赏
  • 举报
回复
怎么直接存储有效期(就是加2天和1年),我只会直接存getdate()的时间,还有定期更新是写java定时任务执行吗

27,579

社区成员

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

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