Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从SQL Server表的单个日期列中获取开始/结束日期_Sql_Sql Server - Fatal编程技术网

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

如何从SQL Server表的单个日期列中获取开始/结束日期,sql,sql-server,Sql,Sql Server,你能帮我解决我的问题吗。我使用的是SQL Server数据库,我希望从开始日期+月或日获取结束日期 如果月份不为空,则将其添加到开始日期以获取结束日期 如果day不为null,则将其添加到开始日期以获取结束日期 我有这张桌子: | ID | startdate | month | day | | 1 | 2019-03-05| 3 | null | | 2 | 2019-03-05| null | 30 | 期望输出: | ID | startdate |

你能帮我解决我的问题吗。我使用的是SQL Server数据库,我希望从开始日期+月或日获取结束日期

  • 如果月份不为空,则将其添加到开始日期以获取结束日期
  • 如果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查询吗?

您可以在下面尝试-使用
dateadd()
函数

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

可以使用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
要通过检查添加日期,可以使用如下所示的用例语句

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

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

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

它对月份有效,但示例中的日期无效work@ahmed检查修改后的查询。@ahmed请求您接受答案,如果它解决了您的问题。如果月和日两列都有价值怎么办?@Mukesh Arora这没什么大不了的&OP比我们更了解如何处理这种情况以及如何做,但在我的情况下,其他部分会起作用。当您将在2019年3月5日增加30天时,将给出2019年4月4日,而不是4月5日,因此请在所需输出中更正它。因为三月是31天。