Here are routines that can handle date arithmetic on BC dates, Julian day functions, and simulation of Oracle's support of old-style-calendar dates -- including simulation of an Oracle bug. So the routines are good for extending the range of useable dates, compact storage, and import/export between DBMSs that have different rules.

If you need to refresh your understanding of dates, read our old-but-lovely article first: The Oracle Calendar.

I wrote the main routines with standard SQL so they should run
on

any DBMS that supports the standard, but tested only with

MySQL and MariaDB. (UPDATE on 2019-02-04: corrections were needed
with HSQLDB, see the comments.)

[Read more]

ocelot_date_to_julianday

Return number of days since 4713-01-01, given yyyy-mm-dd [BC] date

ocelot_date_validate

Return okay or error, given yyyy-mm-dd BC|AD date …