2017-09-25 49 views
0

我已经在MS SQL Server 2000数据库上创建了一个函数,该函数将一个基数为10的数字转换为基数为64并且适合我的目的。我也需要这个功能是在MySQL数据库中我已经将它转换然而,它抛出一个异常,说从MS SQL Server移植UDF到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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/' 
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 
GO 

MySQL的功能

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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'; 
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 

回答

0

这可能是你的问题:

IF Pvalue <> 0 THEN 
    SET result = digit + result; 
END IF; 

MySQL使用CONCAT()字符串连接:

IF Pvalue <> 0 THEN 
    SET result = CONCAT(digit, result); 
END IF; 
+0

@jasemilly:在除了答案之外,要小心SQL Server中的“(@value/64)”和MySQL中的“(Pvalue/64)”,计算结果可能会不同。 – wchiquito

+0

是的,mySQL和SQL的结果是不同的 – jasemilly