做项目时经常碰到的业务:根据合同指定的起租日期和终止日期以及缴费方式,计算出两个日期之间的缴费记录,以便提醒缴费。
说明:
1、例子中的两个日期、缴费方式从合同中获取。
2、缴费方式主要有:月份、季付、半年付、年付,且以汉字的形式保存在数据库。
思路:根据终止日期和起租日期,计算出两个日期之间相差多少个月份,再根据缴费方式进行月份叠加,即
月付*1,季付*3,半年付*6,年付*12,如此计算出每个月缴费的日期以及下个月缴费的日期,再计算这两个日期之间的天数,最后乘以每天的房租费用,就可以得到每个月应该缴纳的总房租。
SQL如下:
CREATE PROCEDURE [dbo].[calcuteContractPay] @id int --合同序号 AS BEGIN SET NOCOUNT ON; --1、校验合同序号是否存在 if @id is null begin raiserror('必须告知合同序号',16,1); return ; end --2、获取缴费方式 declare @field12 varchar(20);--缴费方式 declare @field39 datetime;--起租日期 declare @field40 datetime;--截止日期 declare @field66 numeric(18,2);--每天总租金 select @field12 = field12,@field39=field39,@field40=field40,@field66=isnull(field66,0) from table3 where field1=@id; if @field12 is null or len(@field12)<=0 begin raiserror('必须告知缴费方式',16,1); return ; end --3、校验日期是否合法 declare @day int;--两者之间的天数 set @day = datediff(day,@field39,@field40); if(@day<=0) begin raiserror('终止日期必须大于起租日期',16,1); return ; end --4、根据缴费方式判断总共要输入多少条缴费记录 set @field12 = rtrim(ltrim(@field12));--去除空格 declare @monthes int; declare @totalRent numeric(18,2);--总租金 declare @type int;--缴费类型 if(@field12='月付') set @type=1; else if(@field12='季付') set @type=2; else if(@field12='半年付') set @type=3; else if(@field12='年付') set @type=4; --4、1 计算开始日期与终止之间有多少个月份 set @monthes = datediff(month,@field39,@field40);--月份 if @monthes=0 --说明是在当月/当季/半年之内/当年起租、终止,那么只需要直接计算两者之间的天数 begin set @totalRent = @day*@field66;--天数*每天的总价 begin --添加缴费记录 insert into table6 select field1,field2,field4,field5,field12,field39,@totalRent,field42,field64,field11,0,NULL,0,@totalRent,@totalRent,0, field13,@day,field40 from table3 where field1=@id; end end else --说明至少有一个月 begin declare @startTime datetime;--开始日期 declare @endTime datetime;--结束日期 declare @num int; set @num=0; while(@num<=@monthes) begin --print @num; set @startTime = dateadd(month,@num,@field39);--计算每个月应缴费日期 if(@type=1) set @num=@num+1;--月付 else if(@type=2) set @num=@num+3;--季付 else if(@type=3) set @num=@num+6;--半年付 else if(@type=4) set @num=@num+12;--年付 set @endTime = dateadd(month,@num,@field39);--下个月的缴费日期 --终止日期减去下一个月的日期,如果终止日期比下一个月的日期大,说明还需要再缴一个月,那么使用下一个月的日期,否则使用终止日期 set @day = datediff(day,@endTime,@field40); if(@day<0) set @endTime=@field40; --计算开始日期和结束日期之间的天数 set @day = datediff(day,@startTime,@endTime); set @totalRent = @day*@field66;--天数*每天的总价 if(@totalRent>0) begin insert into table6 select field1,field2,field4,field5,field12,@startTime,@totalRent,field42,field64,field11,0,NULL,0,@totalRent,@totalRent,0, field13,@day,@endTime from table3 where field1=@id; end end end END GO
相关推荐
sqlserver sql 根据出生日期生成年龄 去
SQLServer 根据生日计算年龄
每种方法都有其适用场景和局限性,开发者可以根据实际需求选择最合适的方式来实现日期过滤的功能。此外,随着SQL Server版本的不断更新,还会有更多的新特性被引入,以支持更加灵活和强大的日期处理功能。
根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念...
### SQL Server中的日期计算方法详解 在SQL Server中进行日期计算是数据库操作中常见的需求之一。本文将深入探讨SQL Server中处理日期的各种方法,并通过具体的示例来展示这些方法的实际应用。 #### 1. DATEADD 和...
总结,SQL SERVER 2005的日期时间类型提供了灵活的日期和时间管理,但需要对它们的存储方式、赋值规则以及查询语法有深入理解,才能有效地操作和检索日期时间数据。在实际应用中,结合`DATEFORMAT`、`CONVERT`等工具...
SQL Server 中的日期函数是数据库管理系统中非常重要的一部分,它提供了多种方式来处理日期和时间数据。在本文中,我们将详细介绍 SQL Server 中的日期函数,包括字符转日期、日期转字符串等方面的知识点。 日期...
--返回开始时间和结束时间 格式:dbo.GetDateStartFirstAndLast(type,datetype,datetime,time) Type 日期类型:(“-”为前一期间,无符号为当期,“+”为后一期间),Y 年,Q 季,M 月,W 周,D 日 例:前一年:-Y...
本文将主要介绍 SQL Server 日期函数的使用以及 C# 中的 DateTime 使用。 SQL Server 日期函数 SQL Server 中提供了多种日期函数,包括 GETDATE()、DATEPART()、DATEDIFF()、DATEADD() 等。 1. GETDATE(): ...
SQLSERVER计算年龄(岁月天),可以精确到岁,月,几月几天。
SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...
根据提供的文件信息,本文将详细解释SQL Server中的时间算法,主要关注如何利用SQL Server内置函数进行日期和时间的计算,包括获取当前日期的前一天、后一天、月初、月末等操作。 ### 获取当前日期的前一天 在SQL ...
SQL Server的JAR包是Java开发者在与SQL Server数据库进行交互时所必需的库文件,它们包含了连接、查询、操作数据库所需的各种类和方法。在Java应用程序中,使用这些JAR包可以实现对SQL Server数据库的高效访问。下面...
SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...
在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...
SQL Server 提供了多种日期函数,用于处理日期和时间数据。下面将详细介绍这些函数的用法。 1. GETDATE() 函数 GETDATE() 函数用于获取当前日期和时间。该函数返回当前服务器的日期和时间,可以作为 DATETIME 类型...
5. **支持SQL Server的新特性和改进**:包括对XML数据类型的原生支持,改进的错误处理机制,以及对大容量日志记录和快照隔离的支持。 6. **数据类型和函数的扩展**:除了基本的SQL Server数据类型,Native Client还...
SQL Server 2019是微软公司发布的一款企业级数据库管理系统,它在SQL Server 2017的基础上进一步增强了性能、安全性和可扩展性。在这个压缩包“sqlserver2019.rar”中,包含了两个重要的安装文件:SSMS-Setup-CHS....
"Spotlight on SQL Server"很可能是指一款专门针对SQL Server的监控和性能优化工具,它可以帮助管理员深入了解SQL Server的运行状态,识别并解决性能瓶颈。 1. **SQL Server基础知识**:SQL Server是一个全面的...
类以及其他处理SQL Server特性的类和方法。 2. `sqljdbc_auth.dll`(Windows)或`libsqljdbc_auth.so`(Linux / macOS):这是一个身份验证库,支持集成Windows身份验证(Kerberos和NTLM)。如果需要使用此功能,...