为了账号安全,请及时绑定邮箱和手机立即绑定

时间查询问题 可程序和sql来实现

时间查询问题 可程序和sql来实现

开心每一天1111 2018-12-06 16:28:31
求jfqsrq 是开始时间 jfzzrq  是结束时间    统计这些时间  具体要求是     jfqsrq           j fzzrq    2008-1-1     2008-3-31    2008-4-1    2008 -6-30    2008-8-1    2008-9-31    2008 -10-1  2009-3-31 统计结果的应为    2008-1-1     2008-6-30    2008-8-1    2009 - 3-31  拿上一条数据的jfzzrq 和下一条数据的jfqsrq 相比 相差一月或是不差就合并起来 可用程序和sql语句来实现     自己写的程序实现   1 publicstring GetJfmxBzsj(DataTable dt)2 {3 var result ="";4 if (dt ==null)5 return result;6 elseif (dt.Rows.Count ==1)7 {8 result = GetSfyf(dt.Rows[0]["jfqsrq"].ToString(), dt.Rows[0]["jfzzrq"].ToString());9 }10 else11 {12 int i =0;13 while (true)14 {15 var kssj = Convert.ToDateTime(dt.Rows[i]["jfqsrq"]);16 var jssj = Convert.ToDateTime(dt.Rows[i]["jfzzrq"]);17 for (; i < dt.Rows.Count -1; i++)18 {19 var temp = Convert.ToDateTime(dt.Rows[i +1]["jfqsrq"]);20 //同年的时候 终止时间 是下条记录的起始时间的上月 则合并 不同年 上年的月份为12 下年为1月 则合并21 if ((jssj.Year == temp.Year && jssj.Month +1== temp.Month) || (jssj.Year +1== temp.Year && jssj.Month ==12&& temp.Month ==1))22 {23 jssj = Convert.ToDateTime(dt.Rows[i +1]["jfzzrq"]);24 }25 else26 {27 result +=""+ GetSfyf(kssj.ToString(), jssj.ToString());28 i = i +1;29 break;30 }31 }32 if (i == dt.Rows.Count -1) //最后一列33 {34 result +=""+ GetSfyf(dt.Rows[i]["jfqsrq"].ToString(), dt.Rows[i]["jfzzrq"].ToString());35 break;36 }37 }38 }39 return result;40 }41 42 43 ///<summary>44 /// 获取缴费月份段45 ///</summary>46 ///<param name="start">开始时间</param>47 ///<param name="end">结束时间</param>48 ///<returns></returns>49 publicstring GetSfyf(string start, string end)50 {51 if (start ==""|| end =="")52 return"";53 var s = DateTime.Parse(start);54 var e = DateTime.Parse(end);55 if (s.Year == e.Year && s.Month != e.Month)56 {57 return e.Year.ToString().Trim() +"年"+"("+ s.Month.ToString().Trim() +"-"+ e.Month.ToString().Trim() +")月";58 }59 elseif (s.Year == e.Year && s.Month == e.Month)60 {61 return s.ToString("yyyy年MM月");62 }63 elseif (s.Year != e.Year)64 {65 return s.ToString("yyyy年MM月") +"至"+ e.ToString("yyyy年MM月");66 }67 return"";68 }
查看完整描述

6 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

感觉有点意思,不过sql的还没想出来...程序的比较简单

只要把数据取出放到dataset里然后遍历这个就可以了.

查看完整回答
反对 回复 2019-01-21
?
慕森卡

TA贡献1806条经验 获得超8个赞

程序的 我也做了 不过感觉不怎么好 不知道sql中有办法实现没
我用的oracle 数据库
当然用sql解决的办法也是可以的
查看完整回答
反对 回复 2019-01-21
?
白板的微信

TA贡献1883条经验 获得超3个赞

oracle 数据库没有用过,如果要用数据库的话要考虑游标了,不然不能和下一行的比较的吧。在我印象中没有这样的函数,
查看完整回答
反对 回复 2019-01-21
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我看了一下那个lead 和lag 函数 似乎有这样的效果
查看完整回答
反对 回复 2019-01-21
  • 6 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信