0

将 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

请任何人帮助我解决这个问题。

4

2 回答 2

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文档

于 2012-08-03T07:02:55.980 回答
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 ;
于 2012-08-03T07:07:49.760 回答