Ich bin neu in der SQL und ich möchte einen Trigger in PostgreSQL erstellen, die überprüft, ob eine Person adult von Zeichenfolge "PersonalNumber" ist, die im Format "Yymmdd" ist. Mein Problem ist, ich kann keine Möglichkeit finden, einen Zeitstempel aus der Zeichenfolge zu erstellen, damit ich es in der Funktion age() verwenden kann.Wie man Alter in PostgreSQL
Hier ist mein Code so weit. Ich weiß, dass ich das Alter der Eingabevariablen anfangs falsch eingegeben habe, aber ich finde einfach keinen Weg es zum Laufen zu bringen.
CREATE FUNCTION is_person_adult() RETURNS trigger AS $person$
BEGIN
IF age(substr(new."personalNumber", 0, 2) + "-" + substr(new."personalNumber", 2, 4) + "-" + substr(new."personalNumber", 4, 6), current_date) > 18 THEN
new.isadult = TRUE;
ELSE
new.isadult := FALSE;
END IF;
END;
$person$ LANGUAGE plpgsql;
CREATE TRIGGER person_stamp BEFORE INSERT OR UPDATE ON person
FOR EACH ROW EXECUTE PROCEDURE is_person_adult();
Beachten Sie, dass das Ergebnis, das Sie speichern, werden von morgen überholt sein, und abhängige Daten verletzt [zweite Normalform] speichern (https://en.wikipedia.org/wiki/ Zweite_normale_form). Es ist besser, den Geburtstag zu speichern und das Alter zum gewünschten Zeitpunkt zu berechnen. – Andomar