如何在PostgreSQL中将查询日期存入date数组并解决22P02错误
报错原因
你的写法是直接将单条查询返回的date类型值赋值给date[]类型的数组变量,PostgreSQL会尝试把单个日期字符串解析为数组字面量,因此触发格式错误。
数组赋值修正
需要用array_agg()聚合函数将匹配的所有日期聚合为数组后再赋值,同时可以用coalesce处理无匹配数据时返回空数组,避免后续判断出现空值异常:
declare dateval date[]; target_date date := '2021-05-01'; -- 替换为你要判断的目标日期变量 begin select coalesce(array_agg(days), '{}'::date[]) into dateval from holidays where days between '2021-01-01' and '2021-12-31' and city='NY';
分支判断逻辑
使用= ANY(数组变量)语法即可判断日期是否在数组中,分支逻辑示例如下:
if target_date = ANY(dateval) then -- 日期属于节假日的分支逻辑 raise notice '目标日期为纽约节假日'; else -- 日期不属于节假日的分支逻辑 raise notice '目标日期不是纽约节假日'; end if; end;
内容的提问来源于stack exchange,提问作者Finny
相关产品推荐
相关产品推荐

