探してみたら意外に見つからなかったので、関数を作ってみました。
CREATE OR REPLACE FUNCTION japanese_calendar_to_date(jp_date text) RETURNS date AS $$
DECLARE date_parts text[];
BEGIN
date_parts := regexp_matches(jp_date, '(.{2})(\d{1,2})(.{1})(\d{1,2})(.{1})(\d{1,2})');
CASE date_parts[1]
WHEN '明治' THEN
return make_date(1867 + date_parts[2]::int, date_parts[4]::int, date_parts[6]::int);
WHEN '大正' THEN
return make_date(1911 + date_parts[2]::int, date_parts[4]::int, date_parts[6]::int);
WHEN '昭和' THEN
return make_date(1925 + date_parts[2]::int, date_parts[4]::int, date_parts[6]::int);
WHEN '平成' THEN
return make_date(1988 + date_parts[2]::int, date_parts[4]::int, date_parts[6]::int);
WHEN '令和' THEN
return make_date(2018 + date_parts[2]::int, date_parts[4]::int, date_parts[6]::int);
ELSE
RAISE EXCEPTION '%は不正な和暦です。', jp_date;
END CASE;
END
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
動作はバージョン11.5で確認しています。
# select japanese_calendar_to_date('昭和43年12月21日');
japanese_calendar_to_date
---------------------------
1968-12-21
(1 row)