Store all dates in normal DATE field in the database and have additional accuracy field how accurate DATE field actually is.
date_created DATE,
date_created_accuracy INTEGER,
date_created_accuracy: 1 = exact date, 2 = month, 3 = year.
If your date is fuzzy (e.g May 1980) store it at start of period (e.g. May 1st. 1980). Or if your date is accurate to year (e.g. 1980) store it as January 1st. 1980 with corresponding accuracy value.
This way can easily query in a somewhat natural way and still have notion how accurate dates are. For example this allows you to query dates between Jan 1st 1980
and Feb 28th 1981
, and get fuzzy dates 1980
and May 1980
.