如何在SQL Server中获取这样的日期?

时间:2014-04-23 03:37:31

标签: sql sql-server date select

我在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创建开票日期。

任何人都可以帮我这样做吗?我应该在查询中做什么来格式化结算日期并将其与今天的日期进行比较?

请有人帮帮我。

提前致谢。

2 个答案:

答案 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