首页 > 解决方案 > 存储函数 - 格式化列数据的语法

问题描述

如果您可以快速浏览以下内容,我们将不胜感激。

我创建了以下存储函数,以便将日期时间从表格式化为 mysql 格式;(%Y-%m-%d; %h:%i:%s);

    Delimiter $$

      create function formatdata(dataparameter varchar(20), hourparametru 
    varchar(20)) 
    begin
    DECLARE x time;
    declare y date;
    set x = (select STR_TO_DATE(Datăcolumn,'%h:%i:%s')from tabelname);
    set y = (select STR_TO_DATE(oracolumn,'%Y-%m-%d')from tabelname);
    select x,y;
    if current_time > time(hourcolumn) then
    select STR_TO_DATE(Datăcolumn,'%Y-%m-%d')into x from tabelname;
    select STR_TO_DATE(oracolumn,'%h:%i:%s') into y from tabelname;
    return(x,y);
    end if;
    end $$
    Delimiter ;

我在这里做错了什么?错误是您在第一个 select_Str_to_date 附近的 sql 语法中有错误。但我有点困惑局部变量,IN参数如何协同工作 - 所以我假设这是我做错的地方..

标签: mysqlsql

解决方案


如果将变量设置为标量 SELECT 查询的结果,则将查询放在括号内。

这个:

set x = select STR_TO_DATE('07:47:20','%h:%i:%s');

应该:

set x = (select STR_TO_DATE('07:47:20','%h:%i:%s'));

这解释了语法错误。

您在此功能中还有一些其他问题。


回复您的评论:

该行:

select x,y;

将返回一个结果集,但这在存储函数中是不允许的(在存储过程中是允许的)。我认为您可以删除此行。

存储函数只能返回单个标量值。RETURNS <datatype>你应该在你的前面有一行BEGIN,你应该RETURN在你的函数中的某个地方有一个值。

另一个问题:如果表格有多行,您的分配无效。仅当查询返回单列单行时,将变量设置为标量 SELECT 查询结果才有效。

另一个问题:

if current_time > time(hourcolumn) then

是什么hourcolumn?它不是函数参数或局部变量。但是,如果它是表的列,则没有语法可以说明您指的是哪个表。

另一个问题:

return(x,y);

您不能从存储的函数中返回一对变量。只有一个变量。

另一个问题:唯一RETURN的是在一个IF块内。如果IF条件不成立,函数应该返回什么?


推荐阅读