Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
我刚刚开始学习如何在SQL中创建函数,因此我试图制作一个简单的函数,将日期时间“转换”为文本“ day month_name year”,但由于出现错误我无法弄清楚因为错误消息只是说“语法有误”,并指向首先声明。有人可以告诉我我在做什么错吗?

分隔符$$

CREATE FUNCTION'testf'(invar DATETIME)返回varchar(15)
开始
    声明vout varchar(30);
    声明vin varchar(15);

    设置vin =提取(invar中的月份);

    案例
        当1然后设置vout ='Styczeń';
        当2然后设置vout ='Luty';
        当3然后设置vout ='Marzec';
        当4然后设置vout ='Kwiecień';
        当5然后设置vout ='Maj';
        当6然后设置vout ='Czerwiec';
        当7然后设置vout ='Lipiec';
        当8然后设置vout ='Sierpień';
        当9然后设置vout ='Wrzesień';
        当10时设置vout ='Październik';
        当11然后设置vout ='Listopad';
        当12然后设置vout ='Grudzień';
    最终案例

    返回concat(
        提取(来自invar的日期),
        ''
        vout,
        ''
        摘录(来自invar的年份)
    );
END $$

定界符;

最佳答案

只需删除函数名称中的简单引号即可。

DELIMITER $$

CREATE FUNCTION testf(invar DATETIME) RETURNS varchar(15)
BEGIN
   DECLARE vout varchar(30);
   DECLARE vin varchar(15);

   set vin = extract(month from invar);

   case vin
       when 1 then set vout = 'Styczeń';
       when 2 then set vout = 'Luty';
       when 3 then set vout = 'Marzec';
       when 4 then set vout = 'Kwiecień';
       when 5 then set vout = 'Maj';
       when 6 then set vout = 'Czerwiec';
       when 7 then set vout = 'Lipiec';
       when 8 then set vout = 'Sierpień';
       when 9 then set vout = 'Wrzesień';
       when 10 then set vout = 'Październik';
       when 11 then set vout = 'Listopad';
       when 12 then set vout = 'Grudzień';
   end case;

   return concat(
       extract(day from invar),
       ' ',
       vout,
       ' ',
       extract(year from invar)
   );
END$$

DELIMITER ;


我已经对它进行了测试(不带引号),并且该函数已成功创建。

08-27 10:44