如何从SQL Server表的单个日期列中获取开始/结束日期
你能帮我解决我的问题吗。我使用的是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 |
- 如果月份不为空,则将其添加到开始日期以获取结束日期
- 如果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天。