Mysql функция для конвертации в/из системы счисления, от 2-62

Ирокез

бессмертный пони
Команда форума
Партнер клуба
mysql функция для конвертации в/из системы счисления,
- dir - направление (0 прямое, 1 обратное)
- offset - параметр сдвигающий алфавит системы счисления на offset символов, к примеру для 16 системы счисления 0123456789abcdef, offset = 5, получим алфавит 56789abcdef01234

PHP:
CREATE FUNCTION `BaseConvert`(num varchar(100),base INT,dir INT, offset INT) RETURNS varchar(100) CHARSET utf8
BEGIN
	DECLARE AlphabetSymbols VARCHAR(64) DEFAULT "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    DECLARE AlphabetCurrent VARCHAR(64) DEFAULT "";
    DECLARE AlphabetLength INT DEFAULT 62;
    DECLARE AlphabetOffset INT DEFAULT 0;
    DECLARE Result0 varchar(100) DEFAULT "";
    DECLARE Result1 bigint DEFAULT 0;
    DECLARE It1 INT DEFAULT 1;
    
    SET AlphabetOffset = ((offset % AlphabetLength) % base);
    SET AlphabetCurrent = CONCAT(MID(AlphabetSymbols,AlphabetOffset+1,base - AlphabetOffset),MID(AlphabetSymbols,1,AlphabetOffset));
	IF dir = 0 THEN
		WHILE num DO
			SET Result0 = CONCAT(substr(AlphabetCurrent, (num % base)+1,1),Result0);
			SET num =  FLOOR((num/base));
		END WHILE;
        RETURN Result0;
    ELSE
		WHILE It1<=LENGTH(num) DO
			SET Result1 = (Result1 * base) + (LOCATE(MID(num,It1,1),binary AlphabetCurrent) - 1);
			SET It1 = It1 + 1;
		END WHILE;
        RETURN Result1;
    END IF;
	RETURN NULL;
END
может кому полезно будет.
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
Код:
 SELECT CONV('ff',16,10);
+------------------+
| CONV('ff',16,10) |
+------------------+
| 255              |
+------------------+
??
 

WMix

герр M:)ller
Партнер клуба
вот еще бы inc и можно asinы генерить
 
Сверху