mysql - 日期mysql函数错误

标签 mysql function

我尝试将这些 mysql 函数用于波斯语日期 我得到了这个错误,但我无法解决它

SQL query:

CREATE FUNCTION `persian_day` (
indate date
) RETURNS int( 11 ) BEGIN declare j int;

MySQL said: Documentation
#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 '' at line 3 

我使用 mysqlnd 5.0.8-dev 和 phpmyadmin(xampp 包)

这是我的功能

CREATE FUNCTION `persian_mod`(a double,b double) RETURNS int(11)
return (a - b * floor(a / b))

CREATE FUNCTION `persian_div`(a double,b double) RETURNS int(11)
return (floor(a / b))

CREATE FUNCTION `persian_pj`(y int,m int,d int) RETURNS int(11)
return ( 227260 +
        1029983 * persian_div((y - 474), 2820) + 
        365 * ( (persian_mod((y - 474), 2820) + 474) - 1) + 
        persian_div(682 * (persian_mod((y - 474), 2820) + 474) - 110, 2816) + 
        if(m > 6, 30 * m + 6, 31 * m)  
        + d )


CREATE FUNCTION `persian_day`(indate date) RETURNS int(11)
begin
declare j int;
declare a int;
declare b int ;
declare c int;
declare d int;
declare yearr int;
declare f double;
declare monthh int;
    set j=TO_DAYS(indate) ;
        set a = j - persian_pj(475, 0, 1) ;
        set b = persian_div(a, 1029983) ;
        set c = persian_mod(a, 1029983) ;
        set d = if(c <> 1029982, persian_div(2816 * c + 1031337, 1028522), 2820) ;
    set yearr = 474 + 2820 * b + d;
        set f = (1 + j) - persian_pj(yearr, 0, 1);
        set monthh= if(f > 186, ceil((f - 6) / 30) - 1, ceil(f / 31) - 1);

        return (j - (persian_pj(yearr, monthh, 1) - 1));
end

为什么会出现这个错误?如何解决?

最佳答案

创建函数时的基本语法是你应该有一个返回语句。

CREATE FUNCTION fnctionName (paramList)
RETURNS datatype
BEGIN
   RETURN valueToReturn;
END

但是如果你的函数内部有特殊的计算(当然是多行),你需要先改变分隔符:

DELIMITER $$
CREATE FUNCTION fnctionName (paramList)
RETURNS datatype
BEGIN
   DECLARE ....;

   ..... other codes ;

   RETURN valueToReturn;
END $$
DELIMITER ;

回到你的情况,

CREATE FUNCTION `persian_day` (indate date) RETURNS int( 11 ) 
BEGIN 
     declare j int;

您没有RETURN 值,也没有使用END 关键字关闭函数。就像您对您创建的其他函数所做的那样。

CREATE FUNCTION Example

关于mysql - 日期mysql函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911137/

相关文章:

javascript - 解析 JSON 以在 Javascript 中创建对象

c++ - 将运算符重载为成员函数或非成员(友元)函数?

javascript - 需要帮助分解 JavaScript 函数

python - 通过循环函数中的每一行来修改数据框

Mysql查询计算列中的公共(public)数字

mysql - 使用另一个表的唯一值更新一个表?

具有条件最大值的 MySQL 查询

mysql - 如何使用 GROUP BY 和 ORDER BY 处理 MySQL 结果集过滤器

MySql,如何选择3列中不重复的值

PHP:将完整数组与空数组合并还是先检查 isset()?