SQL数据库时间差

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL数据库时间差相关的知识,希望对你有一定的参考价值。

SQL数据库现有两个字段,都是datetime类型的。现在要在数据库中再增加一个datetime或者其他合适类型的字段。让它的值等于前面字段的差,怎么设置啊

参考技术A 先给此表增加一个数字类型的列“Diff”,然执行如下sql语句:
update
[表名]
set
[diff]=datediff(day,[A日期列],[B日期列])
datediff函数的第一个参数设置为day时,计算的是两个日期以天为单位的差数,设置为month、year时以此类推。

sql查询按时间累计

用sql查询,表如下
表名:T
编号 时间 金额
A 2009-5-2 1
B 2010-1-1 2
A 2010-2-8 3
B 2010-3-9 4
希望查询后的效果如下
编号 时间 金额 本年累计金额 总累计金额
A 2009-5-2 1 1 1
B 2010-1-1 2 2 2
A 2010-2-8 3 3 4
B 2010-3-9 4 6 6

就是每行后面加两列,分别是到本月的本年累计数,和总共的累计数

如何写这个SQL的查询呢?谢谢
我是要做浏览器报表,要用SQL写好多,这是其中的一部分,不能用EXCEL~~~~~~~~~~

做是可以做出来,我暂时没考虑优化的问题。
我用的是Oracle数据库,有些函数和写法可能数据库产品之间不太一样,没办法了。
首先创建一个表:
indexof Varchar2
dateof Date
feeof Number

然后插入测试数据:
insert all
into test08 values('A',to_date('2009-05-02 00:00:00','yyyy-mm-dd hh24:mi:ss'),1)
into test08 values('B',to_date('2010-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),2)
into test08 values('A',to_date('2010-02-08 00:00:00','yyyy-mm-dd hh24:mi:ss'),3)
into test08 values('B',to_date('2010-03-09 00:00:00','yyyy-mm-dd hh24:mi:ss'),4)
into test08 values('A',to_date('2009-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),5)
into test08 values('A',to_date('2012-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss'),38)
select * from dual

然后这个表就和你那个差不多了
A 2009-05-02 00:00:00 1
B 2010-01-01 00:00:00 2
A 2010-02-08 00:00:00 3
B 2010-03-09 00:00:00 4
A 2009-03-01 00:00:00 5
A 2012-03-01 00:00:00 38
稍微多了几个主要是测试用。

然后查询你需要的:
select t1.indexof as indexof,t1.dateof as 日期,t1.feeof as 当期费用,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.dateof>=trunc(t1.dateof,'yyyy')
and t2.indexof=t1.indexof
) as 本年度累加,
(
select sum(t2.feeof) from test08 t2
where t2.dateof<=t1.dateof
and t2.indexof=t1.indexof
) as 总累加
from test08 t1
order by dateof

注意:trunc函数是Oracle数据库函数,是取当前日期的年份的。
order by dateof如果不需要可以删除。有什么不明白的地方可以直接M我。
参考技术A 这样的数据放在EXCEL中处理比较好,SQL用来处理数据效果不好

以上是关于SQL数据库时间差的主要内容,如果未能解决你的问题,请参考以下文章

sql数据库怎么加上时间条件查询

sql查询开始时间和结束时间之间的数据?

sql中如何获取当天时间的零点

sql 计算SQL Server数据库恢复时间

sql 查询时间、日期范围内的数据

sql 查询每天一条数据