2011-07-15 32 views
-2

所以我想将我在MSSQL中创建的函数转换为MYSQL。我有它写在MSSQL的方式是:MsSQL到MySQL函数转换

ALTER function FormatDate(@date datetime) returns varchar(10) 
begin 
declare @salida varchar(10) 

if (@date != '') and (@date != '01/01/1900') 
    begin 
     declare @day varchar(2) 
     set @day = cast(day(@date) as varchar) 
     if len(@day) = 1 
       set @day = '0' + @day 

     declare @month varchar(2) 
     set @month = cast(month(@date) as varchar) 
     if len(@month) = 1 
       set @month = '0' + @month 

     select @salida = @month + '/' + @day + '/' + cast(year(@date) as varchar) 
    end 
else 
    set @salida = null 

return @salida 
end 

我想将该功能转换为MYSQL函数。我试过这个:

Delimiter $$ 

create function FormatDate(tiempo datetime) 
RETURNS varchar(10) 
READS SQL DATA 
BEGIN 

declare salida varchar(10); 

if ((tiempo != '') and (tiempo != '01/01/1900')) then 

     BEGIN 

      declare dia varchar(2); 

      set dia = cast(day(tiempo) as varchar); 

      if len(dia) = 1 then 
       set dia = '0' + dia; 
      END IF; 

      declare mes varchar(2); 

      set mes = cast(month(tiempo) as varchar); 

      if len(mes) = 1 then 
       set mes = '0' + mes; 
      END IF; 

      select salida = mes + '/' + dia + '/' + cast(year(tiempo) as varchar); 




    else 

     set salida = null; 

    END; End if; 

     return (salida); 

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 'varchar); 

      if len(dia) = 1 then 
      ' at line 14 
  • 有人可以帮我这个转换功能MSSQL到MySQL的功能?
+0

看看SO上的格式化选项,它会帮助你获得更好的反馈。 – takeshin

+0

我没有得到赞扬,似乎是一个合法的问题对我 – DForck42

回答

0

的函数来确定MySQL中的字符串lenght被称为长度(),而不是LEN()

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_length

更多:

我下面加你的函数的工作版本。但请注意,内置功能DATE_FORMAT()不正是你想要的:

mysql> SELECT FormatDate(NOW()), DATE_FORMAT(NOW(), "%m/%d/%Y"); 
+---------------------+----------------------------------+ 
| FormatDate(NOW()) | DATE_FORMAT(NOW(), "%m/%d/%Y") | 
+---------------------+----------------------------------+ 
| 07/15/2011   | 07/15/2011      | 
+---------------------+----------------------------------+ 

您应该使用它或与该函数的调用替换函数体内。然而,这里是你的功能的MySQL兼容版本:

DELIMITER $$ 

CREATE FUNCTION `FormatDate`(tiempo datetime) RETURNS varchar(10) 
    READS SQL DATA 
BEGIN 

    DECLARE salida VARCHAR(10); 
    DECLARE dia VARCHAR(2); 
    DECLARE mes VARCHAR(2); 

    IF ((tiempo <> '') AND (tiempo <> '01/01/1900')) THEN 

     SET dia := CAST(DAY(tiempo) AS CHAR); 
     IF LENGTH(dia) = 1 THEN 
      SET dia := CONCAT('0', dia); 
     END IF; 

     SET mes := CAST(MONTH(tiempo) AS CHAR); 
     IF LENGTH(mes) = 1 THEN 
      SET mes := CONCAT('0', mes); 
     END IF; 

     SET salida := CONCAT_WS('/', mes, dia, CAST(YEAR(tiempo) AS CHAR)); 
    ELSE 
     SET salida := NULL; 
    END IF; 

    RETURN salida; 

    END $$ 

DELIMITER ; 
+0

感谢您的更正,但仍然没有纠正我的问题。我仍然收到错误: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 'varchar); if length(dia) = 1 then ' at line 13