【问题标题】:MsSQL to MySQL function conversionMsSQL 到 MySQL 函数转换
【发布时间】:2011-07-15 17:58:44
【问题描述】:

所以我试图将我在 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 函数?

【问题讨论】:

  • 看看 SO 上的格式选项,它将帮助您获得更好的反馈。
  • 我没有得到反对票,对我来说似乎是一个合法的问题

标签: mysql sql-server function


【解决方案1】:

在 MySQL 中确定字符串长度的函数称为 LENGTH(),而不是 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 ;

【讨论】:

  • 感谢您的更正,但这仍然没有解决我的问题。我仍然收到错误:错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'varchar) 附近使用的正确语法; if length(dia) = 1 then ' 在第 13 行
猜你喜欢
  • 2014-02-28
  • 2015-07-25
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多