我在 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
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 = '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
最佳答案
这可能是您的问题:
IF Pvalue <> 0 THEN
SET result = digit + result;
END IF;
MySQL 使用 CONCAT()
进行字符串连接:
IF Pvalue <> 0 THEN
SET result = CONCAT(digit, result);
END IF;
关于mysql - 将 UDF 从 MS SQL Server 移植到 MySQL 会引发异常,不正确的双值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46403252/