时间的判断++

1x1y 2007-03-15 04:39:40
travel_id b_date e_date disp_month (注:允许发生的月份)
1 2006-12-12 2008-12-12 1,2,3,4,10,12
2 2006-11-12 2007-12-12 1,9
3 2006-1-12 2006-12-12 1,2,9
4 2006-2-12 2005-12-12 1
5 2006-12-12 2008-12-12 10,12
6 2006-12-12 2007-12-12 1


怎样看选出来 哪个id 即将生效(如果正在生效不记入即将生效范围内) ,哪个正在生效,哪个已经过期. 时间已当前时间为准

即将生效 id 5 ,2
正在生效 id 1
已经过期 id 3,4,6 主要是id=6的怎么判断 .
...全文
371 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
1x1y 2007-03-15
  • 打赏
  • 举报
回复
好的,谢谢...我也在研究.工作第一..
擒兽 2007-03-15
  • 打赏
  • 举报
回复
上面是我自己的,既然结贴了,我就没改字段名

我用的等于,把临近的月份判断那里改成 大于小于,然后再研究一下怎么和allowmonth值比较,估计可以,不过我时间继续给你搞了。

工作第一
擒兽 2007-03-15
  • 打赏
  • 举报
回复
临近过期的我已经搞出来了,不过是用的起始时间和结束时间

SELECT *,
(CASE ( SELECT '有效' FROM Sys_Stock AS TEMP WHERE TEMP.ID=Sys_Stock.ID AND (GETDATE() BETWEEN TEMP.InsertTime AND TEMP.UpdateTime) AND MONTH(GETDATE()) IN (1,2,3) )
WHEN '有效' THEN ( CASE ( SELECT '临近过期' FROM Sys_Stock AS TEMP1 WHERE TEMP1.ID=Sys_Stock.ID AND MONTH( TEMP1.UpdateTime )=MONTH( GETDATE() ) )
WHEN '临近过期' THEN '临近过期'
ELSE '有效'
End )
Else ( CASE ( SELECT '即将生效' FROM Sys_Stock AS TEMP2 WHERE TEMP2.ID=Sys_Stock.ID AND MONTH( TEMP2.InsertTime )=MONTH( GETDATE() ) )
WHEN '即将生效' THEN '即将生效'
ELSE '过期'
End )
END)AS 标记
FROM Sys_Stock
1x1y 2007-03-15
  • 打赏
  • 举报
回复
我再去mysql中问一下吧,前台效果就很麻烦了..
1x1y 2007-03-15
  • 打赏
  • 举报
回复
嗯,大概差不多,看来只有前台了...那就结帖吧.

create table t (travel_id int, [b_date] datetime,[e_date] datetime, disp_month varchar(50))
insert T select 1, '2006-12-12', '2008-12-12', '1,2,3,4,10,12'
union all select 2, '2006-11-12', '2007-12-12', '1,9'
union all select 3, '2006-1-12', '2006-12-12', '1,2,9'
union all select 4, '2006-1-12', '2005-12-12', '1'
union all select 5, '2006-12-12', '2008-12-12', '10,12'
union all select 6, '2006-12-12', '2007-12-12', '1,2,'
foolbirdflyfirst 2007-03-15
  • 打赏
  • 举报
回复
呵呵,前台程序判定吧
sql语句能否在1,2,3,4中找到最大值4?
你现在的需求是如果edate年份为本年,如果当前月份大于disp_month中最大的月份,则过期。否则为即将生效?
擒兽 2007-03-15
  • 打赏
  • 举报
回复
陪你这么久,我工作都没完成,今晚哪又得加班了! 55555
1x1y 2007-03-15
  • 打赏
  • 举报
回复
呵呵,是吧比较麻烦,通过前台,我也差不多.现在想不通过前台..
擒兽 2007-03-15
  • 打赏
  • 举报
回复
CASE里面我不知道能不能嵌套,如果可以嵌套绝对可以用一个字段表示你的四种模式(有效、临近过期、过期、临近生效)

不能嵌套我就得用两个字段来表示
擒兽 2007-03-15
  • 打赏
  • 举报
回复
本省就是啊,一开始我给的语句是只查一种情况。但是改动后可以查两种情况

要查临近过期或即将生效的确有点麻烦,可能要多一个字段出来,但是这里可以通过前台的一个函数解决问题,你不一定要全部用SQL吧
1x1y 2007-03-15
  • 打赏
  • 举报
回复
已经过期的. 你自己试一下.. id=6 是过期的.
擒兽 2007-03-15
  • 打赏
  • 举报
回复
估计这道题我应该可以任职DBA了
擒兽 2007-03-15
  • 打赏
  • 举报
回复
你要给我个判断,用什么来判断是临近过期还是即将生效
擒兽 2007-03-15
  • 打赏
  • 举报
回复
我以为你只要判断月份,你的allowmonth字段只有月份,如果需要精确,我看过了,直接去掉BETWEEN里面的两个MONTH函数即可,那两个也是多于的。

临近过期或者即将生效也可以查出来,我拿人头担保
1x1y 2007-03-15
  • 打赏
  • 举报
回复
主要是id=6的怎么判断 ,有效好判断,其他的感觉不是太好判断,你试试看.
1x1y 2007-03-15
  • 打赏
  • 举报
回复
MONTH 判断会让你丢失对年的判断,会出现错误吧...datediff,在sql里面我用的是这个..
1x1y 2007-03-15
  • 打赏
  • 举报
回复
有效很好查,需要过期,或者即将生效的.. 主要是id=6的怎么判断 .
擒兽 2007-03-15
  • 打赏
  • 举报
回复
你如果有SQL Server,你Copy些数据进去测试一下,看我的结果错了没有
擒兽 2007-03-15
  • 打赏
  • 举报
回复
MySQL有没有 Case 子句? 不好意思我不知道,没深入用过MySQL
擒兽 2007-03-15
  • 打赏
  • 举报
回复
你Copy进去查询分析器,把表的名字改一下,我已经按照你给的解构,改了字段名
加载更多回复(3)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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