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