我正在开发一个计费系统并需要帮助,因为我在这里一无所知。我有一些客户,他们的水电费账单是我银行的责任。在我的系统中,我正在向他们的公用事业公司注册客户以及以下数据。
公用事业公司A
消费者#............... AL12111
比尔生成日期....每月的第07号
账单到期日...........每月18日
截止我的银行日期..每个月的第12天
现在在账单生成屏幕上,我正在接受如下输入。
消费者#...... AL12111
账单输入日期.. 29-10-2010(只读字段系统日期)
顾客...... Josh&有限公司
结算月......十月
到期金额... 5,000美元
现在我的问题是,如何判断会计师是否在截止日期前生成账单,但在账单表格中我没有月份和年份只是月份日期。
感谢您的帮助和解决方案建议..
感谢
答案 0 :(得分:2)
这不是SQL Server问题,甚至不是编程问题 - 这是一个只能由业务分析师/利益相关者回答的业务问题。
要扩展,你有一个日期为yyyy-mm-dd(让我们称之为dt_entry,一个日期时间)和账单到期日期,让我们称之为d(一个整数)。
您可以在与进入日期相同的月份制作日期(请注意,对于月末附近的日期,您需要从业务中获得有关规则的一些说明 - 可能使用某种类型滑动窗口。)
因此,日期表格中的截止日期为dt_entry - DAY(dt_entry)+ d(SQL Server日期时间可以使用简单的整数添加天数,不需要DATEADD)。
你可以看到这会在月底附近出现问题,因为d会很小(比如说1),而且输入日期会很大(比如31)然后假设的截止日期真的是下个月。但是,如果一个人真的很早就付出了代价(比如25日截止日期的第5天)呢?
此外,您可能需要考虑短月,因为2月份不可能有到期的第31个月。
所有这些都是编程问题,只有业务答案。
答案 1 :(得分:0)
创建程序[sp_BillDateCheck]
@CURMONTH VARCHAR(3),
@MONTHNUM INT OUTPUT,
@EBDATEMATCH VARCHAR(90)OUTPUT
AS
BEGIN
DECLEARE @ENTRYDATE DATETIME
SELECT @ENTRYDATE = GETDATE() - 获取当前输入日期
- 通过给予月份名称获取月份数量 SELECT @MONTHNUM = DATEPART(mm,CAST(@CURMONTH +'1900'AS DATETIME))
如果DATEPART(月,@ ntryDATE)= @MONTHNUM
SELECT @EBDATEMATCH ='进入日期和结算月份相同'
如果DATEPART(MONTH,@ ENDDATE)< @MONTHNUM
SELECT @EBDATEMATCH ='入境日期少于一个月'
如果DATEPART(月,@ ntryDATE)> @MONTHNUM
SELECT @EBDATEMATCH ='入境日期大于计费月份'
END
GO`
感谢JNK提供DATEPART提示。我肯定不是小便大脑