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 展开
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 展开
1个回答
展开全部
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();
已测试!在你机上试试吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询