SELECT MyDateStrColumn, CAST(MY_TO_DATE(MyDateStrColumn) AS TIMESTAMP) FROM MyTable
-- ///////
CREATE OR REPLACE FUNCTION MY_TO_DATE (
P_DATUM VARCHAR(100)
)
RETURNS DATE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
BEGIN
DECLARE V1 VARCHAR(20);
DECLARE V2 VARCHAR(20);
DECLARE V3 VARCHAR(20);
DECLARE N1 INTEGER;
DECLARE N2 INTEGER;
DECLARE N3 INTEGER;
DECLARE V_DAG INTEGER;
DECLARE V_MAAND INTEGER;
DECLARE V_JAAR VARCHAR(4);
-- Eerste 3 numerieke waarden uit de string halen
SET V1 = REGEXP_SUBSTR(P_DATUM, '[0-9]+', 1, 1);
SET V2 = REGEXP_SUBSTR(P_DATUM, '[0-9]+', 1, 2);
SET V3 = REGEXP_SUBSTR(P_DATUM, '[0-9]+', 1, 3);
-- Omzetten naar getallen
SET N1 = TRY_CAST(V1 AS INTEGER);
SET N2 = TRY_CAST(V2 AS INTEGER);
SET N3 = TRY_CAST(V3 AS INTEGER);
-- Geen geldige 3 getallen gevonden
IF N1 IS NULL OR N2 IS NULL OR N3 IS NULL THEN
RETURN NULL;
END IF;
-- 3e getal is altijd het jaar
-- 2 cijfers = 20xx
IF LENGTH(V3) = 2 THEN
SET V_JAAR = '20' || V3;
ELSE
SET V_JAAR = V3;
END IF;
/*
Standaard:
dag / maand / jaar
Als het 2e getal > 12 is:
maand / dag / jaar
*/
IF N2 > 12 THEN
SET V_MAAND = N1;
SET V_DAG = N2;
ELSE
SET V_DAG = N1;
SET V_MAAND = N2;
END IF;
/*
ISO-formaat:
YYYY-MM-DD
TRY_CAST zorgt ervoor dat bijvoorbeeld
31-02-2024 -> NULL wordt.
*/
RETURN TRY_CAST(
V_JAAR
|| '-'
|| RIGHT('00' || DIGITS(V_MAAND), 2)
|| '-'
|| RIGHT('00' || DIGITS(V_DAG), 2)
AS DATE
);
END
1029200cookie-checkiSeries Date conversion function