2017-09-25 2 views
0

기본 10을 기본 64로 변환하고 내 용도에 맞게 작동하는 MS SQL Server 2000 데이터베이스에서 함수를 만들었습니다. 나는 또한 그러나 그것을 변환 한 그것은 내가 64 이하의 수를 유지하는 경우, 예를 들어MS SQL Server에서 MySQL로 UDF를 이식하면 예외가 발생합니다. 잘못된 double 값

Truncated double value 'B' 

예는, 지금은 잘 변환한다는 예외가 발생 MySQL 데이터베이스에 있어야이 기능이 필요합니다. 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 

이이 문제가 될 수

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

MySQL의 기능 :

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

MySQL은 문자열 연결 CONCAT() 사용 @jasemilly

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

:에서 답에 덧붙여 SQL 서버의'(@value/64)'와 MySQL의'(Pvalue/64)'에주의를 기울이면 계산 결과가 다를 수 있습니다. – wchiquito

+0

예, 결과는 mySQL과 SQL간에 다릅니다. – jasemilly