Roman numerals
MySQL, SQL
Преобразование числа, записанного римскими цифрами, в INT:
CREATE FUNCTION rtoi(roman VARCHAR(15)) RETURNS INT DETERMINISTIC
BEGIN
DECLARE numeral CHAR(7) DEFAULT 'IVXLCDM';
DECLARE digit TINYINT;
DECLARE prev INT DEFAULT 0;
DECLARE current INT;
DECLARE sum INT DEFAULT 0;
SET roman = UPPER(roman);
WHILE LENGTH(roman) > 0 DO
SET digit := LOCATE(RIGHT(roman, 1), numeral) - 1;
SET current := POW(10, FLOOR(digit / 2)) * POW(5, MOD(digit, 2));
SET sum := sum + POW(-1, current < prev) * current;
SET prev := current;
SET roman = LEFT(roman, LENGTH(roman) - 1);
END WHILE;
RETURN sum;
END//
