Je le stockerais en tant que date
et stockez également la précision.
Par exemple :
CREATE TYPE date_prec AS ENUM ('day', 'month', 'year');
CREATE TABLE pub (
pub_id integer PRIMARY KEY,
pub_date date NOT NULL,
pub_date_prec date_prec NOT NULL
);
Ensuite, vous pouvez interroger la table comme ceci :
SELECT pub_id, date_trunc(pub_date_prec::text, pub_date)::date FROM pub;
pour ignorer toutes les valeurs de jour et de mois "aléatoires" dans pub_date
.