我已经在MS SQL Server 2000数据库上创建了一个函数,该函数可以将基数10转换为基数64,并且对我的目的很好。我还需要这个函数在一个MySQL数据库中,我已经对它进行了转换,但是它抛出了一个异常,
Truncated double value 'B' 例如,如果我将数字保持在64以下,它就可以很好地转换它。SQL函数
CREATE FUNCTION ToBase64(@value int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @seq char(64)
DECLARE @result varchar(50)
DECLARE @digit char(1)
SET @seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
SET @result = SUBSTRING(@seq, (@value%64)+1, 1)
WHILE @value > 0
BEGIN
SET @digit = SUBSTRING(@seq, ((@value/64)%64)+1, 1)
SET @value = @value/64
IF @value <> 0 SET @result = @digit + @result
END
RETURN @result
END
GOmySQL函数
DELIMITER $$
CREATE FUNCTION ToBase64( Pvalue int) RETURNS varchar(50)
DETERMINISTIC
BEGIN
DECLARE seq char(64);
DECLARE result varchar(50);
DECLARE digit char(1);
SET seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
SET result = SUBSTRING(seq, (Pvalue%64)+1, 1);
WHILE Pvalue > 0 do
SET digit = SUBSTRING(seq, ((Pvalue/64)%64)+1, 1);
SET Pvalue = Pvalue/64;
IF Pvalue <> 0 THEN
SET result = digit + result;
END IF;
End While;
RETURN (result);
END发布于 2017-09-25 10:44:44
这可能是你的问题:
IF Pvalue <> 0 THEN
SET result = digit + result;
END IF;MySQL使用CONCAT()进行字符串连接:
IF Pvalue <> 0 THEN
SET result = CONCAT(digit, result);
END IF;https://stackoverflow.com/questions/46403252
复制相似问题