日期逻辑问题

时间:2010-11-02 19:22:45

标签: business-logic application-design

我正在开发一个计费系统并需要帮助,因为我在这里一无所知。我有一些客户,他们的水电费账单是我银行的责任。在我的系统中,我正在向他们的公用事业公司注册客户以及以下数据。

** Biller Table

客户Josh&有限公司

公用事业公司A

消费者#............... AL12111
比尔生成日期....每月的第07号 账单到期日...........每月18日 截止我的银行日期..每个月的第12天

现在在账单生成屏幕上,我正在接受如下输入。

消费者#...... AL12111

账单输入日期.. 29-10-2010(只读字段系统日期)

顾客...... Josh&有限公司

结算月......十月

到期金额... 5,000美元

现在我的问题是,如何判断会计师是否在截止日期前生成账单,但在账单表格中我没有月份和年份只是月份日期。

感谢您的帮助和解决方案建议..

感谢

2 个答案:

答案 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提示。我肯定不是小便大脑