I have these 2 tables with values:
create table FieldTable (
FieldId int,
FieldName varchar(256),
FieldValue sql_variant);
go
insert into FieldTable values (1, 'ABC', '04/17/2020');
go
create table DatbeTable (
Dt date,
DayType char);
go
insert into DatbeTable values ('2020-04-01','B');
insert into DatbeTable values ('2020-04-02','B');
insert into DatbeTable values ('2020-04-03','B');
insert into DatbeTable values ('2020-04-04','W');
insert into DatbeTable values ('2020-04-05','W');
insert into DatbeTable values ('2020-04-06','B');
insert into DatbeTable values ('2020-04-07','B');
insert into DatbeTable values ('2020-04-08','B');
insert into DatbeTable values ('2020-04-09','B');
insert into DatbeTable values ('2020-04-10','B');
insert into DatbeTable values ('2020-04-11','W');
insert into DatbeTable values ('2020-04-12','W');
insert into DatbeTable values ('2020-04-13','B');
insert into DatbeTable values ('2020-04-14','B');
insert into DatbeTable values ('2020-04-15','B');
insert into DatbeTable values ('2020-04-16','B');
insert into DatbeTable values ('2020-04-17','B');
insert into DatbeTable values ('2020-04-18','W');
insert into DatbeTable values ('2020-04-19','W');
insert into DatbeTable values ('2020-04-20','B');
insert into DatbeTable values ('2020-04-21','B');
insert into DatbeTable values ('2020-04-22','B');
insert into DatbeTable values ('2020-04-23','B');
insert into DatbeTable values ('2020-04-24','B');
insert into DatbeTable values ('2020-04-25','W');
insert into DatbeTable values ('2020-04-26','W');
insert into DatbeTable values ('2020-04-27','B');
insert into DatbeTable values ('2020-04-28','B');
insert into DatbeTable values ('2020-04-29','B');
insert into DatbeTable values ('2020-04-30','B');
go
I want to add 3 business days from the FieldValue
date to the new column: NewFieldValue
for that row.
select
FieldId,
FieldName,
FieldValue--,
--NewFieldValue
into #temp
from FieldTable ft
join DatbeTable d
on format(try_convert(date, ft.FieldValue), 'd', 'en-us') = format(try_convert(date, d.Dt), 'd', 'en-us');
go
I can't really figure out how to use the 2 tables to get this below result:
FieldId FieldName FieldValue NewFieldValue
------- --------- ---------- -------------
1 ABC 04/17/2020 04/22/2020
You can use row_number()
to find out the nth
business day from your base date
select
FieldId,
FieldName,
FieldValue,
d.Dt as NewFieldValue
from FieldTable ft
cross apply
(
select x.Dt, day_no = row_number() over (ORDER BY x.Dt)
from DatbeTable x
where x.Dt > try_convert(date, ft.FieldValue)
and x.DayType = 'B' -- business day only
) d
where d.day_no = 3 -- add 3 business days
Note: Don't convert the date to string for comparison.
PS: you should explain what is B
and W
. Thought it is pretty obvious that it is Business and Weekend but nevertheless, it is clearer if explain the related columns in your table.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.