这是我尝试过的一个比较混乱的功能。逻辑在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$$
答案 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$$