需要帮助将mssql函数转换为mysql

时间:2012-08-03 12:16:48

标签: mysql sql-server

有没有人可以帮我解决将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;

1 个答案:

答案 0 :(得分: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()SIGNEDUNSIGNED作为目标类型。 INT不起作用。 (1)
  • 您从mssql中的CONVERT()语法中提出错误;您使用Money代替srt1(1)。混淆的原因是MSSQL和MySQL中的CONVERT()反转了它们的参数。
  • ELSE之后不需要(或接受)THEN关键字(2)
  • 您在最终END IF(3)
  • 之前还有额外的END$$
  • DELIMITER ;需要空格(4)