0

我是使用 postgres 和 PL/pgSQL 的新手。我的代码如下。我想修改我的代码以将变量的值与生成系列函数进行比较,例如:

if variable == '2019-08-22' then 
generate_series(date_trunc('day', s.beg), date_trunc('day', 
least(s.enddate, current_date)), interval '1 day') gs(date)
else 
generate_series(date_trunc('day', s.beg), date_trunc('day', 
least(s.enddate, $$var$$)), interval '1 day') gs(date)

在我的代码下面。任何建议都非常感谢。

INSERT INTO $$||table_name||$$
(number_, date, type, minutes)
 select
     number_, gs.date,
      (case
            when trim(string) ~ '^XYZ[0-9]$'
       then 'ALPHANUMERIC'
      end) as type,
sum(extract(epoch from (least(s.enddate, gs.date + interval '1 day' -
                           greatest(s.beg, gs.date)
                          )
              ) / 60) as minutes
from table s cross join lateral
generate_series(date_trunc('day', s.beg), date_trunc('day', 
least(s.enddate, current_date)), interval '1 day') gs(date) 
4

1 回答 1

0

那将是一个CASE表达式:

generate_series(
   date_trunc('day', s.beg),
   date_trunc(
      'day',
      least(
         s.enddate,
         CASE WHEN var = '2019-08-22'
              THEN current_date
              ELSE var
         END
      )
   ),
   interval '1 day'
)

切勿使用字符串连接构造 SQL 语句,这会使您容易受到 SQL 注入的攻击。使用format

format('INSERT INTO %I VALUES ...', table_name)
于 2020-09-25T06:45:54.987 回答