In my Postgres 13 DB I want to update a column mother_tongues_id in my table based on name columns.
Names are like "Le Minh Thien" and I want to check if those contain words like 'le' or 'lee' then set nationality to 'Vietnam'. The words check table is some thing like this:
| language | noun |
|---|---|
| vietnam | +lee+le+long+la+ |
| chinese | +lu+zhu+ |
Here is my UPDATE code:
UPDATE resume SET mother_tongues_id = ( SELECT id FROM mother_tongues WHERE check_language(resume.id) = id limit 1); WHERE mother_tongues_id IS NULL; Here is my check_language() function:
CREATE OR REPLACE FUNCTION check_language(rid integer) RETURNS integer AS $BODY$ DECLARE i int = (SELECT (LENGTH(CONCAT(first_name, ' ',last_name)) - LENGTH(replace(CONCAT(first_name, ' ',last_name), ' ', ''))) FROM resume where id = rid); DECLARE sname varchar = ''; DECLARE sid int = 0 LOOP SET i = i - 1; SET sname = SELECT split_part(SELECT CONCAT(first_name, ' ',last_name) FROM resume where id = rid, ' ', i) if select id from mother_tongues WHERE noun ILIKE '%+sname+%' then SET sid = id; end if; IF i = 1 THEN EXIT; END IF; END LOOP; if sid > 0 then RETURN sid; else RETURN NULL; end if; END; $BODY$ LANGUAGE plpgsql; I try to create a function in Postgres with loop to split the name and check the words, however always error.