Преобразование функций MsSQL в MySQL - PullRequest
0 голосов
/ 15 июля 2011

Поэтому я пытаюсь преобразовать функцию, созданную в MSSQL, в MYSQL. Я написал это на MSSQL так:

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?

1 Ответ

0 голосов
/ 15 июля 2011

Функция определения длины строки в MySQL называется LENGTH (), а не len ()

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

MORE:

Я добавил рабочую версиювашей функции ниже.Но обратите внимание, что встроенная функция 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...