需要帮助将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;
答
此代码应解析:
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()语法中提出错误;您使用
Money
而不是srt1
(1)。造成混淆的原因是MSSQL和MySQL中的CONVERT()
将其参数颠倒过来。 -
ELSE
它(2) - 您收到一个额外的
END IF
后不需要(或接受)一个THEN
关键字最终END$$
(3) -
DELIMITER ;
需要一个空间(4)
+0
哦,是的,它的工作。捆绑的thanx亲爱的.. :) – Raheel 2012-08-03 13:06:33
你能证明你所尝试过的吗? – 2012-08-03 12:20:47
什么是DELMIMITER $$?添加';'。然后尝试使用其他MySQL函数更改Sql Server函数。 – Devart 2012-08-03 12:40:33
它不是'DELMIMITER',它是'DELIMITER' - 你在第四个位置的额外'M'可能是你的语法问题的重要组成部分。 “L”后面没有“M”;去掉它。 – 2012-08-03 12:44:02