0
MS SQL Server 2000データベースで基数10の数値を基数64に変換して自分の目的に適した関数を作成しました。また、私はそれはしかし、それは私が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
の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
:
MySQLは文字列の連結のための
CONCAT()
を使用してSQL Serverの '(@value/64)'とMySQLの '(Pvalue/64)'には注意が必要ですが、計算結果が異なる場合があります。 – wchiquitoはい、結果はmySQLとSQLで異なります – jasemilly