博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按时间分段算费用
阅读量:5087 次
发布时间:2019-06-13

本文共 1492 字,大约阅读时间需要 4 分钟。

第一个表 table1 为消费都用的时间:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[Table1]
GO

CREATE TABLE [dbo].[Table1] (

 [AutoID] [int] NOT NULL ,
 [BeginTime] [datetime] NULL ,
 [EndTime] [datetime] NULL
) ON [PRIMARY]
GO

 insert into table1

   select 1 ,'2013-10-01 13:04:05.000','2013-10-01 14:04:05.000'

第二张表为记费规则表:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Table2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[Table2]
GO

CREATE TABLE [dbo].[Table2] (

 [AutoID] [int] NOT NULL ,
 [BeginTime] [datetime] NULL ,
 [EndTime] [datetime] NULL ,
 [Fee] [decimal](18, 0) NULL
) ON [PRIMARY]
GO

insert into table2

select 1,'2013-10-01 12:00:00.000','2013-10-01 13:00:00.000',2 union

select 2,'2013-10-01 13:00:00.000','2013-10-01 14:00:00.000',3 union

select 3,'2013-10-01 14:00:00.000','2013-10-01 15:00:00.000',4

计算的sql 语句如下:

select *,cast(DATEDIFF( Minute, begintime,endTime) as decimal(18,4))/60 * fee as cost from(
select

case when b.begintime < a.begintime and  a.begintime < b.endTime then  a.beginTIme else b.beginTime  end  as beginTime,

case when b.begintime < a.endTime and  a.endTime < b.endTime then  a.endTIme else  b.endTIme  end  as EndTime,
b.fee

 from table1 a  CROSS  join table2 b

where

((a.begintime >b.begintime)   and  (a.begintime < b.endTime)) or

(b.begintime < a.endTime and  a.endTime < b.endTime)) as a

结果如下:

 

 

转载于:https://www.cnblogs.com/xiajing12345/p/3383758.html

你可能感兴趣的文章
多线程辅助类之CountDownLatch(三)
查看>>
typedef用法
查看>>
ehlib ado 删除选中记录 的方法
查看>>
日期 时间选择器(DatePicker和TimePicker)实现用户选择
查看>>
AdapterViewFlipper功能 自动播放的图片库
查看>>
leetcode 28 Implement Strstr()
查看>>
asp.net 下OnClientClick的妙用
查看>>
es6 - 模板
查看>>
python基础-正则表达式
查看>>
实现最大索引堆
查看>>
Java equals和hashcode 的区别
查看>>
Redis 笔记与总结1 安装部署
查看>>
(转)linux route命令深入浅出与实战案例精讲
查看>>
HDU3466背包01
查看>>
POJ 2069 Super Star(计算几何の最小球包含+模拟退火)
查看>>
jdk工具keytool和jarsigner帮助Part2(jdk keytool&jarsigner tool manual)
查看>>
联想ThinkPad S3-S440虚拟机安装,ubuntu安装,Hadoop(2.7.1)详解及WordCount运行,spark集群搭建...
查看>>
Web前端面试题集锦
查看>>
Android 通过AIDL在两个APP之间Service通信
查看>>
关于笔试题输入输出的小问题
查看>>