如何从SQL Server表的单个日期列中获取开始/结束日期

时间:2019-03-14 05:46:21

标签: sql sql-server

您能帮我解决我的问题吗?我正在使用SQL Server数据库,并且想从开始日期+月或日中获取结束日期。

  • 如果month不为空,则将其添加到开始日期以获取结束日期
  • 如果day不为null,则将其添加到开始日期以获取结束日期

我有这张桌子:

| ID | startdate |  month |  day  | 
| 1  | 2019-03-05|   3    | null  |
| 2  | 2019-03-05|  null  |   30  |

所需的输出:

| ID | startdate |  month |  day  |  enddate  |
| 1  | 2019-03-05|   3    | null  |2019-06-05 |
| 2  | 2019-03-05|  null  |   30  |2019-04-04 |

能否请您帮我编写一个SQL查询?

3 个答案:

答案 0 :(得分:1)

您可以使用以下查询获得所需结果

declare @TestDate table
(id int, startdate date, [month] int, [day] int)

insert into @TestDate
values
(1, '2019-03-05', 3, null)

insert into @TestDate
values
(1, '2019-03-05',  null, 30)

select Id,
    startdate,
    [month],
    [day],
    dateadd(day, isnull(day, 0), dateadd(month, isnull([month], 0), startdate)) as enddate
from @TestDate

答案 1 :(得分:0)

您可以尝试以下操作-使用dateadd()函数

select id, 
       startdate, 
       dateadd(case when month is null then dd else mm, coalesce(month,day),startdate) as enddate
from tablename

答案 2 :(得分:0)

您可以使用Dateadd()函数尝试以下查询。 DATEADD()函数向日期添加时间/日期间隔,然后返回日期。

create table tblMonth (Id int, startdate date, month int, day int)
insert into tblMonth values
( 1, '2019-03-05', 3, null),
(1, '2019-03-05', null, 30)

Select Id, startdate, month, day, DATEADD(MM, isnull(month,0), startDate) AS endDate
    from tblMonth

要添加日期并进行检查,可以使用case语句,如下所示。

Select Id, startdate, month, day, 
    case when month is null then 
            DATEADD(dd, isnull(day, 0), startDate) 
        else
            DATEADD(mm, isnull(month,0), startDate) 
        end
    AS endDate
from tblMonth

Live Demo