我在SQL Server 2012中有一个包含此数据的表。
tbl_contract
:
ContractId RenueDate BillDay BillMonth
------------------------------------------------------------------
1 2014-06-15 10 -1
2 2014-08-04 1 -2
现在我需要格式化结算日期和结算日期应该根据renuedate的billmonth和billday,例如,
ContractId RenueDate BillingDate
---------------------------------------------------
1 2014-06-15 2014-05-10
2 2014-08-04 2014-06-01
我只需要使用SQL查询。意味着我需要获得其开票日期小于或等于今天日期的合同。我需要从renue date,billday和billmonth创建开票日期。
任何人都可以帮我这样做吗?我应该在查询中做什么来格式化结算日期并将其与今天的日期进行比较?
请有人帮帮我。
提前致谢。
答案 0 :(得分:1)
这样的事情:
select
ContractId,
RenueDate,
BillingDate = Cast(DateAdd(month, BillMonth, DateAdd(day,BillDay-1,DateAdd(month, DateDiff(month, 0, RenueDate), 0))) as date)
from tbl_contract
测试:
select
ContractId,
RenueDate,
BillingDate = Cast(DateAdd(month, BillMonth, DateAdd(day,BillDay-1,DateAdd(month, DateDiff(month, 0, RenueDate), 0))) as date)
from
(
values
(1, cast('2014-06-15' as date), 10, -1),
(2, cast('2014-08-04' as date), 1, -2)
) as tbl_contract(ContractId, RenueDate, BillDay, BillMonth)
答案 1 :(得分:1)
Select CONTRACTID, RENUEDATE, REPLACE(CONVERT(VARCHAR,DATEADD(D,-(DAY(NEWDATE)) + BillDay,NEWDATE),111),'/','-')
From (
Select CONTRACTID,
REPLACE(CONVERT(VARCHAR,RENUEDATE,111),'/','-') RENUEDATE, DATEADD(M, BILLMONTH, RENUEDATE) NEWDATE, BillDay
From TBL_CONTRACT
) AS Tbl
试试这个。它会给你输出相同的输出。 如下。
CONTRACTID RENUEDATE BILLINGDATE
1 2014-06-15 2014-05-10
2 2014-08-04 2014-06-01