2012-08-03 92 views
1

任何人都可以幫助我解決將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

回答

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它(2)
  • 您收到一個額外的END IF後不需要(或接受)一個THEN關鍵字最終END$$(3)
  • DELIMITER ;需要一個空間(4)
+0

哦,是的,它的工作。捆綁的thanx親愛的.. :) – Raheel 2012-08-03 13:06:33