... WHERE `<condition1>` conjunction `<condition2>` conjunction `<condition3>`
where condition1,2,3 are your conditions
and conjunction is the conjunction of those conditions you want (ie, AND or OR)
For example if you have a table of dates in A, and a table of Holidays (called Holiday) then you might do, assuming the following table definitions as follows and that the dates are "wall clock local time":
```
create table A
(
scheduled text not null check (date(scheduled, '+0 days') == scheduled)
);
create table Holidays
(
holiday text not null unique check (date(holiday, '+0 days') == holiday)
);
```
and you populate those tables with data, then you might do so as follows:
```
with moveto(rowid, scheduled)
as (
select rowid, date(scheduled, '+1 day') -- move to next day if
from A
where strftime('%w', scheduled) in ('0', '6') -- falls on Sunday or Saturday
or exists (select * from holidays where holiday == scheduled) -- or on a holiday
union -- use a b-tree since we need one anyway
select rowid, date(scheduled, '+1 day') -- move to next day if
from moveto
where strftime('%w', scheduled) in ('0', '6') -- falls on Sunday or Saturday
or exists (select * from holidays where holiday == scheduled) -- or a holiday
order by rowid -- put in correct order to optimize b-tree
),
updates (rowid, scheduled) -- find the latest date for each row to update
as (
select rowid, max(scheduled)
from moveto
group by rowid
)
update A
set scheduled = updates.scheduled
from updates
where A.rowid == updates.rowid
;
```
Example,
```
insert into A values ('2020-11-06');
insert into Holidays values ('2020-11-06');
select * from A;
-- run the recursive CTE above
select * from A;
```
Note -- recursive CTE fixed so it actually works properly. Also added comments and slight optimizations.