将ms sql函数转换为mysql

时间:2012-08-03 06:53:06

标签: mysql sql sql-server sql-server-2008

我在将ms sql函数转换为mysql时遇到问题。这是ms sql函数代码:

CREATE FUNCTION [crewu2].[isAvailable] (@OwnerID int, @DateFrom Smalldatetime, @DateTo Smalldatetime)  
RETURNS bit AS  
BEGIN  
    DECLARE @t bit  
    IF @DateFrom IS NULL or @DateTo IS NULL 
        or EXISTS (select DateID
                     from [client_BlackDates]
                    where OwnerID=@OwnerID 
                      and ((DateFrom<=@DateFrom and @DateFrom<=DateTo) 
                            or (DateFrom<=@DateTo and @DateTo<=DateTo)))  
        SET @t=0  
    ELSE  
        SET @t=1  
RETURN @t  
END  

这里转换为mysql:

DELIMITER $$  
CREATE FUNCTION isAvailable (OwnerID INT, DateFrom DATETIME, DateTo DATETIME)  
RETURNS BIT   
BEGIN  
    DECLARE t BIT;  
    IF DateFrom IS NULL OR DateTo IS NULL
        OR EXISTS (SELECT DateID
                     FROM client_BlackDates
                    WHERE OwnerID=OwnerID 
                      AND ((DateFrom<=DateFrom AND DateFrom<=DateTo)
                            OR (DateFrom<=DateTo AND DateTo<=DateTo)))  
        SET t=0;  
    ELSE  
        SET t=1;  
    RETURN t  
END $$  
DELIMITER;

但是它给了我以下错误:

Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET t=0; ELSE SET t=1; RETURN t END' at line 6

请有人帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

这应该有用(您错过了THENEND IF):

DELIMITER $$
CREATE FUNCTION isAvailable (OwnerID INT, DateFrom DATETIME, DateTo DATETIME)
RETURNS BIT
BEGIN
DECLARE t BIT;
IF DateFrom IS NULL OR DateTo IS NULL OR EXISTS (SELECT DateID FROM client_BlackDates WHERE OwnerID=OwnerID AND ((DateFrom<=DateFrom AND DateFrom<=DateTo) OR (DateFrom<=DateTo AND DateTo<=DateTo)))
**THEN** 
SET t=0;
ELSE
SET t=1;    
RETURN t;
**END IF;**
END $$
DELIMITER ;

参考MySQL docs

答案 1 :(得分:1)

使用IF..THEN..ELSE语法

查看MySQL手册
DELIMITER //
CREATE FUNCTION isAvailable (OwnerID INT, DateFrom DATETIME, DateTo DATETIME)  
RETURNS BIT   
BEGIN  
    DECLARE t BIT;  
    IF DateFrom IS NULL OR DateTo IS NULL 
       OR EXISTS (SELECT DateID
                    FROM client_BlackDates
                   WHERE OwnerID=OwnerID
                      AND ((DateFrom<=DateFrom AND DateFrom<=DateTo)
                            OR (DateFrom<=DateTo AND DateTo<=DateTo)))
        THEN
        SET t = 0;
    ELSE  
        SET t = 1;  
    END IF;
    RETURN t;
END //
DELIMITER ;