首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UDF从MySQL移植到MySQL引发不正确的双值异常

将UDF从MySQL移植到MySQL引发不正确的双值异常
EN

Stack Overflow用户
提问于 2017-09-25 10:41:53
回答 1查看 38关注 0票数 0

我已经在MS SQL Server 2000数据库上创建了一个函数,该函数可以将基数10转换为基数64,并且对我的目的很好。我还需要这个函数在一个MySQL数据库中,我已经对它进行了转换,但是它抛出了一个异常,

代码语言:javascript
复制
 Truncated double value 'B' 

例如,如果我将数字保持在64以下,它就可以很好地转换它。SQL函数

代码语言:javascript
复制
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函数

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 10:44:44

这可能是你的问题:

代码语言:javascript
复制
IF Pvalue <> 0  THEN
    SET result = digit + result;
END IF;

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

代码语言:javascript
复制
IF Pvalue <> 0  THEN
    SET result = CONCAT(digit, result);
END IF;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46403252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档