1

MsSQL を MySQL に変換する際の問題を解決するのを手伝ってくれる人はいますか? 構文エラーが発生します。

元の Mssql 関数:

CREATE  FUNCTION StrToNum (srt1 varchar(250))  
RETURNS real AS  
 BEGIN 
DECLARE t real
IF srt1 IS NOT NULL and ISNUMERIC(srt1)=1 and PATINDEX('%,%',srt1)=0 and 
PATINDEX('%e%',srt1)=0
SET t=CONVERT(Money,srt1)
ELSE
SET t=NULL
RETURN t
END

私はmysqlとしてこのようにしてみました

DELIMITER $$  
CREATE  FUNCTION StrToNum (srt1 VARCHAR(250))   
RETURNS REAL DETERMINISTIC  
BEGIN   
DECLARE t REAL;  
IF srt1 IS NOT NULL AND srt1 > 0 AND POSITION('%,%' IN srt1=0) AND POSITION('%e%' IN srt1=0)  
THEN SET t=CONVERT(Money,INT);  
ELSE  
THEN SET t=NULL; END IF;  
RETURN t;  
END IF;  
END $$  
DELIMITER;
4

1 に答える 1

2

このコードは次を解析する必要があります。

DELIMITER $$  
CREATE  FUNCTION StrToNum (srt1 VARCHAR(250))   
RETURNS REAL DETERMINISTIC  
BEGIN   
DECLARE t REAL;  
IF srt1 IS NOT NULL AND srt1 > 0 
    AND POSITION('%,%' IN srt1=0) 
    AND POSITION('%e%' IN     srt1=0)  
THEN SET t=CONVERT(srt1,signed);  --(1)
ELSE  
 SET t=NULL; END IF;              --(2)
RETURN t;   
END $$                            --(3)
DELIMITER ;                       --(4)

私はあなたのためにそれを分解します:

  • CONVERT()SIGNEDまたはをUNSIGNEDターゲット タイプとして使用します。INT動作しません。(1)
  • mssql の CONVERT() 構文からエラーが発生しました。(1)Moneyの代わりに使用しました。srt1混乱の理由はCONVERT()、MSSQL と MySQL ではパラメーターが逆になっているためです。
  • ELSETHEN後にキーワードを必要としない (または受け入れない) (2)
  • END IF決勝の前にエキストラがありましたEND$$(3)
  • DELIMITER ;スペースが必要です (4)
于 2012-08-03T13:03:27.133 に答える