0

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

**帐单表

客户 Josh & Co.

公用事业公司 A

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

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

消费者#...... AL12111

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

客户 .... Josh & Co.

计费月份 .... 十月

应付金额... 5,000 美元

现在我的问题是,我如何确定会计师是否在到期日之前生成账单,但在账单表中我没有月份和年份,只是月份的日期。

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

谢谢

4

2 回答 2

2

这不是 SQL Server 问题,甚至不是编程问题 - 这是一个只能由您的业务分析师/利益相关者回答的业务问题。

为了扩展,您有一个输入日期 yyyy-mm-dd(我们称之为 dt_entry,一个日期时间)和账单到期的一个月中的一天,我们称之为 d(一个整数)。

您将在与进入日期相同的月份制造一个日期(请注意,对于接近月底的日期,您需要从业务部门获得一些关于规则的说明 - 可能使用某种滑动窗口)。

所以日期形式的截止日期是 dt_entry - DAY(dt_entry) + d (SQL Server datetime 可以使用简单的整数加法来表示天数,不需要 DATEADD)。

您可以在接近月底的时候看到这会在哪里导致问题,因为 d 会很小(比如 1),而输入日期会很大(比如 31),然后假设的到期日实际上是下个月。但是,如果一个人真的很早付款(比如 25 日到期的 5 日)怎么办?

此外,您可能需要考虑较短的月份,因为 2 月的 31 日不可能到期。

所有这些都是只有商业答案的编程问题。

于 2010-11-02T19:45:21.290 回答
0

创建过程 [sp_BillDateCheck]
@CURMONTH VARCHAR(3)、
@MONTHNUM INT 输出、
@EBDATEMATCH VARCHAR(90) 输出
作为开始声明
@ENTRYDATE
DATETIME
SELECT @ENTRYDATE = GETDATE() --获取当前输入日期

-- 通过给出月份名称获取月份编号
SELECT @MONTHNUM = DATEPART(mm,CAST(@CURMONTH + '1900' AS DATETIME))

IF DATEPART(MONTH, @ENTRYDATE) = @MONTHNUM
SELECT @EBDATEMATCH = '输入日期和计费月份相同'

IF DATEPART(MONTH, @ENTRYDATE) < @MONTHNUM
SELECT @EBDATEMATCH = '输入日期小于计费月份'

IF DATEPART(MONTH, @ENTRYDATE) > @MONTHNUM
SELECT @EBDATEMATCH = '输入日期大于结算月份'
END
GO`

感谢 JNK 提供 DATEPART 提示。我肯定不是小便大脑

于 2010-11-02T20:52:52.860 回答