sql查询语句日期区间实现对查询结果累加

数据库:tshul(数量)startdate(开始日期)enddate(结束日期)22015-01-012015-01-0342015-01-032015-01-0532... 数据库:
tshul(数量) startdate(开始日期) enddate(结束日期)
2 2015-01-01 2015-01-03
4 2015-01-03 2015-01-05
3 2015-01-03 2015-01-04

winform应用程序中有2个dateTimePicker,分别为dtp2和dtp3,假如dtp2为'2014-01-02',dtp3为'2015-01-04',查询实现功能:select sum(tshul) as 数量 from 表t1 where (dtp2,dtp3)中日期所有在(startdate(开始日期) ,enddate(结束日期))之间,where后面那个条件表达式如何写???
查询结果:
数量
18
展开
 我来答
fly夜飞纷飞
推荐于2016-08-20 · TA获得超过132个赞
知道小有建树答主
回答量:168
采纳率:85%
帮助的人:113万
展开全部
 string st= dtp2.Value.ToShortDateString();
 string et= dtp3.Value.ToShortDateString();
 string sql = "select sum(tshul) as 数量 from 表t1 where startdate <='"+st+"' 
  and enddate >='"+et+"';

dtp2也相当于是开始时间 ,dtp3的相当于结束日期 对吗?如果是,那么就只要判断dtp2日期是大于等于startdate,和dtp3日期是小于等于enddate。楼主试一下看看。

追问
dtp2也相当于是开始时间 ,dtp3的相当于结束日期,
查询结果:数量为18,计算过程--数量*天数 即2*2+4*2+3*2=18
追答
 DateTime st = DateTime.Parse(dtp2.Text);
 DateTime et = DateTime.Parse(dtp3.Text);
 TimeSpan ts1 = new TimeSpan(st.Ticks);
 TimeSpan ts2 = new TimeSpan(et.Ticks);
 TimeSpan ts = ts1.Subtract(ts2).Duration();
 int dateDiff = Convert.ToInt32(ts.Days);//计算出这2个日期之间相隔的天数
 string sql = "select sum(tshul)*" + dateDiff + "  as 数量 from t1 where (enddate >='" + et + "' and startdate <='" + et + "') or (startdate <='" + st + "' and enddate>='" + st + "')";
 SqlCommand cmd = new SqlCommand(sql, conn);
 string result = cmd.ExecuteScalar().ToString();

已测试!在你机上试试吧。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式