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()采用SIGNEDorUNSIGNED作为目标类型。INT不起作用。(1)
  • 您从 mssql 中的 CONVERT() 语法中提出了一个错误;您使用Money而不是srt1(1)。造成混淆的原因是CONVERT()MSSQL 和 MySQL 中的参数颠倒了。
  • ELSE后面不需要(或接受)THEN关键字 (2)
  • END IF在决赛前你有一个额外的END$$(3)
  • DELIMITER ;需要空格 (4)
于 2012-08-03T13:03:27.133 回答