创建函数中的语法错误

时间:2010-08-18 20:58:11

标签: sql mysql function mysql-error-1064

这是我尝试过的一个比较混乱的功能。逻辑在select语句中工作,但我似乎无法创建用户定义的函数。

这是错误:

  

“您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法在'delimiter $$附近使用   创建函数checkdate(   p_datetimestamp varchar(6))retur'   在第1行“

这是代码: (将文本字符串'yymmdd'更改为日期格式。'100810'根据逻辑变为2010-09-01。)

delimiter$$
create function `checkdate` (
 p_datetimestamp varchar (6)
 )
 returns date

begin
declare ret_val date;
set ret_val = 
   str_to_date(
 concat(
  /*Assign Year -> %y*/
    if(
    mid(p_datetimestamp,3,2) = '12',
    (left(p_datetimestamp,2) + 1),
    left(p_datetimestamp,2)
    ),
  /*Assign Month -> %m*/
    if(
    (mid(p_datetimestamp,3,2) >= '01' and mid(p_datetimestamp,3,2) <= '11'),
    concat('0', (mid(p_datetimestamp,3,2) + 1)), '01'
    ),
  /*Assign Date -> %d*/
    if(
    (mid(p_datetimestamp,5,2) >= '01' and mid(p_datetimestamp,5,2) <= '16'), '01', '17'
    ),
 ), 
    '%y%m%d');
return ret_val;
end$$

1 个答案:

答案 0 :(得分:0)

最后一个流氓逗号

DELIMITER $$

create function `checkdate` (
 p_datetimestamp varchar (6)
 )
 returns date

begin
declare ret_val date;
set ret_val = 
   str_to_date(
 concat(
  /*Assign Year -> %y*/
    if(
    mid(p_datetimestamp,3,2) = '12',
    (left(p_datetimestamp,2) + 1),
    left(p_datetimestamp,2)
    ),
  /*Assign Month -> %m*/
    if(
    (mid(p_datetimestamp,3,2) >= '01' and mid(p_datetimestamp,3,2) <= '11'),
    concat('0', (mid(p_datetimestamp,3,2) + 1)), '01'
    ),
  /*Assign Date -> %d*/
    if(
    (mid(p_datetimestamp,5,2) >= '01' and mid(p_datetimestamp,5,2) <= '16'), '01', '17'
    ) /*<-- Comma Removed from Here*/
 ), 
    '%y%m%d');
return ret_val;
end$$