Priča ide ovako, treba mi nabrzaka funkcija a imam je u plsql-u na Oracle-u. Odem na chatGpt on napravi kod ali sa ARRAY tipom koji moj MySQL 8 ne pozna. Onda zamijenim ARRAY sa JSON stringom i iskoristim funkcije JSON_EXTRACT i JSON_UNQUOTE. Zbog indekas mora sam dodati na početku JSON stringa po jedan prazan string (mogao sam to uraditi i uklanjajući 1+ u kodu). E kod priloga je malo drugačije jer kod koristi jednodimenzioni din kao dvodimenzioni. Pa sam na svakih sedam stringova morao dodati po jedan prazan. I tralala … kod radi
CREATE DEFINER=`root`@`%` FUNCTION `BROJUSRPSKI`(
Broj DECIMAL(12, 2)
) RETURNS varchar(255) CHARSET utf8mb4
NO SQL
BEGIN
DECLARE MaxVal INT DEFAULT 99999999;
DECLARE sZeroBroj VARCHAR(100) DEFAULT "nula dinara";
DECLARE Result VARCHAR(255) DEFAULT "";
DECLARE Temp VARCHAR(255) DEFAULT "";
DECLARE Trojka VARCHAR(255) DEFAULT "";
DECLARE S VARCHAR(255);
DECLARE brojac INT DEFAULT 0;
DECLARE eCeo INT;
DECLARE eStoti INT;
DECLARE i INT;
DECLARE k INT;
SET @Jedinice =
'["", " ", "jedna", "dve", "tri", "četiri", "pet", "šest", "sedam", "osam", "devet",
"deset", "jedanaest", "dvanaest", "trinaest", "četrnaest", "petnaest", "šesnaest", "sedamnaest", "osamnaest", "devetnaest",
" ", "jedan", "dva", "tri", "četiri", "pet", "šest", "sedam", "osam", "devet",
"deset", "jedanaest", "dvanaest", "trinaest", "četrnaest", "petnaest", "šesnaest", "sedamnaest", "osamnaest", "devetnaest"]';
SET @Desetice =
'["", " ", " ", "dvadeset", "trideset", "četrdeset", "pedeset", "šezdeset", "sedamdeset", "osamdeset", "devedeset"]';
SET @Stotine =
'["", "", "sto", "dvjesta", "trista", "četristo", "petsto", "šesto", "sedamsto", "osamsto", "devetsto"]';
SET @Prilozi =
'["", "", "", "", "", "", "", "",
"", " KM", "", "", "", "", "", "",
"", "hiljad", "a", "a", "e", "e", "e", "a",
"", "milion", "a", "", "a", "a", "a", "a",
"", "milijard", "i", "a", "e", "e", "e", "i"]';
IF Broj = 0 THEN
RETURN sZeroBroj;
ELSE
SET eCeo = FLOOR(ABS(Broj));
IF eCeo > MaxVal THEN
RETURN "";
END IF;
SET eStoti = (ABS(Broj - eCeo) * 100);
IF eCeo = 0 THEN
SET Result = sZeroBroj;
ELSE
SET S = LPAD(CAST(eCeo AS CHAR), (CEIL(LENGTH(CAST(eCeo AS CHAR)) / 3) * 3), "0");
SET brojac = 1;
WHILE LENGTH(S) > 0 DO
SET Trojka = SUBSTRING(S, LENGTH(S) - 2, 3);
SET S = LEFT(S, LENGTH(S) - 3);
IF Trojka <> "000" THEN
IF SUBSTRING(Trojka, 2, 1) = "0" OR SUBSTRING(Trojka, 2, 1) = "1" THEN
SET i = brojac MOD 2;
SET i = 20 * i + CAST(SUBSTRING(Trojka, 2, 2) AS UNSIGNED);
SET Temp = JSON_UNQUOTE(JSON_EXTRACT(@Jedinice, concat('$[',1+i,']')));
ELSE
SET i = brojac MOD 2;
SET i = 20 * i + CAST(SUBSTRING(Trojka, 3, 1) AS UNSIGNED);
SET k = CAST(SUBSTRING(Trojka, 2, 1) AS UNSIGNED);
SET Temp = CONCAT(JSON_UNQUOTE(JSON_EXTRACT(@Desetice, concat('$[',1 + k,']'))), JSON_UNQUOTE(JSON_EXTRACT(@Jedinice, concat('$[',1+i,']'))));
END IF;
SET i = CAST(SUBSTRING(Trojka, 1, 1) AS UNSIGNED);
SET Temp = CONCAT(JSON_UNQUOTE(JSON_EXTRACT(@Stotine, concat('$[',1 + i,']'))), Temp);
SET i = brojac * 8;
SET k = 1 + CAST(SUBSTRING(Trojka, 2, 2) AS UNSIGNED);
IF k <= 5 THEN
SET Temp = CONCAT(Temp, JSON_UNQUOTE(JSON_EXTRACT(@Prilozi, concat('$[',1 + i,']'))), JSON_UNQUOTE(JSON_EXTRACT(@Prilozi, concat('$[',1 + i + k,']'))));
ELSE
SET Temp = CONCAT(Temp, JSON_UNQUOTE(JSON_EXTRACT(@Prilozi, concat('$[',1 + i,']'))), JSON_UNQUOTE(JSON_EXTRACT(@Prilozi, concat('$[',1 + i + 6,']'))));
END IF;
SET Result = CONCAT(Temp, Result);
END IF;
SET brojac = brojac + 1;
END WHILE;
END IF;
END IF;
RETURN CONCAT(Result, " i ", LPAD(CAST(eStoti AS CHAR), 2, '0'), '/100');
END
