2011-07-15 16 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 
  • は、誰かが私はMYSQL関数にこのMSSQL機能を変換する助けてくださいことはできますか?
+0

これは、あなたのより良いフィードバックを得るのに役立ちます。 – takeshin

+0

私はdownvotesを取得しない、私に合法的な質問のように思われる – DForck42

答えて

0

MySQLで文字列な長さを決定する機能は、(LENない、)(LENGTHと呼ばれている)

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

MORE:

私は以下のあなたの関数の作業バージョンを追加しました。あなたはそれを使用する必要がありますいずれか、またはあなたの関数の本体は、その関数の呼び出しに置き換え

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

:しかし、組み込み関数DATE_FORMAT()が正確に何をしたいんのでご注意ください。しかし、あなたの関数の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

関連する問題