может кто-нибудь помочь мне с моей функцией сортировки - серьезно я не знаю, как я могу заставить его работать так, как предполагалось. . :(База данных находится в MariaDB в Xampp я использую PhpMyAdmin для выполнения запросаphpMyAdmin - mariaDB roman numals function
DELIMITER $$
DROP FUNCTION IF EXISTS convRomanNumeral$$
CREATE FUNCTION convRomanNumeral (numeral CHAR(4))
RETURNS INT
BEGIN
DECLARE intnum INT;
CASE numeral
WHEN "I" THEN intnum = 1;
WHEN "II" THEN intnum = 2;
END CASE;
RETURN intnum;
END;
$$
SET @iteration = -1;
UPDATE `st0gk_docman_documents`
SET created_on = DATE('2016-06-14') + INTERVAL(@iteration := @iteration + 1) SECOND
WHERE `docman_category_id` = 141 ORDER BY convRomanNumeral(SUBSTRING(SUBSTRING_INDEX(title,'/',1),' ',-2) ASC, SUBSTRING_INDEX(title,'/',-2)+0 ASC;
Так что я хочу добиться того, чтобы сортировать документы по названию Пример названия:..
- Документ Nr I/36/2006
- Документ Nr II/36/2006
- Документ Nr I/32/2006
- Документ Nr II/19/2006
После сортировки их по первому римскому номеру, а затем по второму арабскому номеру я хочу обновить дату. Код ниже для обновления только вторым арабским номером работает правильно:
SET @iteration = -1;
UPDATE `st0gk_docman_documents`
SET created_on = DATE('2016-06-14') + INTERVAL(@iteration := @iteration + 1) SECOND
WHERE `docman_category_id` = 141 ORDER BY SUBSTRING_INDEX(title,'/',-2)+0 ASC;
Я хотел бы использовать CASE для возврата правильной переменной для римских значений. Я знаю, что это не идеально, но я даже не могу сделать работу CASE и FUNCTION. Что я делаю неправильно? Все предложения приветствуются.
Это может быть «лучше»: 'SET currentintnum = 0 + convRomanNumeralSubFunction (SUBSTRING (число, счетчик, 1));' И добавьте 'DETERMINISTIC' перед' BEGIN'. –
'convRomanNumeral ('MCMXLIV')' = 1944. Хорошо. –
Прохладный, спасибо Рик. :) –