如何用静态数字替换postgres中的日期
how to replace date in postgres with a static number
我正在编写一个 Postgres 过程,我只想用一些静态编号替换日期的日期部分。
例如:-
varDate Date default '2018-05-21';
假设我想将此日期设置为“2018-05-08”;
任何人都可以告诉如何实现这一目标。
到目前为止我试过的是这个
varDate := varDate - interval '1 day' * 21 + interval '1 day' * 8;
上面的表达式给了我正确的结果。但是有什么快捷方式可以只更改日期的日期部分吗?
据我了解,您想将一个月中的第几天更改为 8。
一种方法是 "truncate" 日期到月初,然后加上 8 天:
vardate := date_trunc('month', vardate)::date + 8;
date_trunc
returns a timestamp
这就是为什么需要强制转换 ::date
的原因。
另一种选择是 "build" 基于现有日期的日期:
vardate := make_date(extract(year from vardate)::int, extract(month from vardate)::int, 8);
另一种选择是在日期上加上天数,这样您就可以在第 8 天到达:
select vardate::date + (8 - extract(day from vardate) * interval '1 day'
我正在编写一个 Postgres 过程,我只想用一些静态编号替换日期的日期部分。
例如:-
varDate Date default '2018-05-21';
假设我想将此日期设置为“2018-05-08”;
任何人都可以告诉如何实现这一目标。
到目前为止我试过的是这个
varDate := varDate - interval '1 day' * 21 + interval '1 day' * 8;
上面的表达式给了我正确的结果。但是有什么快捷方式可以只更改日期的日期部分吗?
据我了解,您想将一个月中的第几天更改为 8。
一种方法是 "truncate" 日期到月初,然后加上 8 天:
vardate := date_trunc('month', vardate)::date + 8;
date_trunc
returns a timestamp
这就是为什么需要强制转换 ::date
的原因。
另一种选择是 "build" 基于现有日期的日期:
vardate := make_date(extract(year from vardate)::int, extract(month from vardate)::int, 8);
另一种选择是在日期上加上天数,这样您就可以在第 8 天到达:
select vardate::date + (8 - extract(day from vardate) * interval '1 day'