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

问题描述:

任何人都可以帮助我解决将MsSQL转换为MySQL的问题吗?它给出了语法错误。需要帮助将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

你能证明你所尝试过的吗? – 2012-08-03 12:20:47

+0

什么是DELMIMITER $$?添加';'。然后尝试使用其他MySQL函数更改Sql Server函数。 – Devart 2012-08-03 12:40:33

+0

它不是'DELMIMITER',它是'DELIMITER' - 你在第四个位置的额外'M'可能是你的语法问题的重要组成部分。 “L”后面没有“M”;去掉它。 – 2012-08-03 12:44:02

此代码应解析:

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它(2)
  • 您收到一个额外的END IF后不需要(或接受)一个THEN关键字最终END$$(3)
  • DELIMITER ;需要一个空间(4)
+0

哦,是的,它的工作。捆绑的thanx亲爱的.. :) – Raheel 2012-08-03 13:06:33