mysql - 存储函数 - 格式化列数据的语法
问题描述
如果您可以快速浏览以下内容,我们将不胜感激。
我创建了以下存储函数,以便将日期时间从表格式化为 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参数如何协同工作 - 所以我假设这是我做错的地方..
解决方案
如果将变量设置为标量 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
条件不成立,函数应该返回什么?
推荐阅读
- c++ - switch语句中的表达式不能是字符串吗?C++
- android - Android 通过 ACTION_GET_CONTENT 仅列出具有特定扩展名的文件
- asp.net-core - ASP.Net 核心。检测是否在启动时为 https 配置?
- javascript - 将 JS 函数与 for 循环同步
- java - 从 Firebaase 检索第二个项目时出错
- c# - CSHARP 每 X 秒运行一次,但直到 bool 为真
- javascript - 使用 d3.js 的螺旋文本
- r - 将数据帧从长格式转换为宽格式,R中有很多列
- python - 将 xarray.Dataset 的字典条目转换为 numpy 数组(用于 xy 坐标等高线绘图)
- sql - SQL,我如何创建一个飞行扇区路线