sql - Postgres - 具有约束的数组日期列
问题描述
我正在尝试创建一个表,该表test_table
具有一个列,该列year
需要一个“年”数组,如下所示:
CREATE TABLE avg_yearly_currencies_used (
id serial PRIMARY KEY,
year date[],
CONSTRAINT first_jan_check CHECK ( date_trunc('year', year) = year )
);
CONSTRAINT
检查日期是否采用以下格式:2010-01-01
或2012-01-01
。
如果year
列不是数组,则上述命令可以正常工作并创建表。但是,通过将日期设为数组并使用CONSTRAINT
,我收到以下错误:
ERROR: function date_trunc(unknown, date[]) does not exist
如何将 应用于CONSTRAINT
数组列year
?
解决方案
您可以使用以下方法
- 编写一个自定义函数来检查数组中的所有值是否都符合条件:
create function check_date (
date_ date[]) returns boolean as
$$
declare
result boolean;
begin
select bool_and (date_trunc('year', n) = n) into result
from unnest(date_) s(n);
return result;
end;
$$
language plpgsql immutable;
- 在检查约束中添加上述功能
CREATE TABLE avg_yearly_currencies_used (
id serial PRIMARY KEY,
year date[],
CONSTRAINT first_jan_check CHECK (check_date(year))
);
推荐阅读
- ios - 当我的应用程序在 swift 中工作时如何获取屏幕截图?
- .net-core - DotNetCore:生成 RSA 私钥/公钥
- java - 使用 Spring Data MongoDB 获取 mongo DB 对象
- java - Eclipse SWT:启用垂直滚动时无法滚动文本
- vue.js - 如果我的验证失败,如何停止输入事件?
- javascript - 无法计算 Discord 增量
- angular - 如何使用cordova(angular js web)创建IOS apk
- sqlite - 根据日期显示 sqlite3 数据库的内容
- symfony - 是否有使用命令行在 symfony 学说 odm 中创建文档的选项?
- reactjs - 当我运行反应时,它给了我这个错误?我不明白这是什么问题。现在,我能做什么?