Mysql 创建一个返回2009年12月6日John Daniel的函数

Mysql 创建一个返回2009年12月6日John Daniel的函数,mysql,Mysql,我一直在尝试创建一个函数,将名字、姓氏和出生日期连接起来,显示为“Marc Smith Dec 6th,2009”。我终于能够充分利用该函数,使其正确执行,但当我选择该函数时,我遇到了一个错误。请让我知道这是否是一个准确的功能,应该选择什么来获得所需的输出 CREATE TABLE Info ( First_name VARCHAR(32), Last_name VARCHAR(32), Birth DATE); INSERT INTO Info (First_name, Last_name

我一直在尝试创建一个函数,将名字、姓氏和出生日期连接起来,显示为“Marc Smith Dec 6th,2009”。我终于能够充分利用该函数,使其正确执行,但当我选择该函数时,我遇到了一个错误。请让我知道这是否是一个准确的功能,应该选择什么来获得所需的输出

CREATE TABLE Info (
First_name VARCHAR(32),
Last_name VARCHAR(32),
Birth DATE);


INSERT INTO Info (First_name, Last_name, Birth) VALUES ('Marc', 'Smith', '2009-12-06');


DELIMITER //

CREATE FUNCTION bdate(
First_Name VARCHAR(32)
Last_Name VARCHAR(32),
Birth DATE))
RETURNS VARCHAR(64)

BEGIN

DECLARE bdate VARCHAR(64);

SET bdate = (SELECT CONCAT(First_Name, ' ', Last_Name, ' ', DATE_FORMAT(Birth, '%b %D, %Y')) FROM Info);                
RETURN bdate();

END //

DELIMITER ;
架构错误:错误:ER_SP_NO_递归:不允许递归存储函数和触发器


您的函数有一些错误

您再次调用了返回函数。使用_bdate绕过问题。 你的括号也太多了

DELIMITER //

CREATE FUNCTION bdate(
First_Name VARCHAR(32),
Last_Name VARCHAR(32),
Birth DATE)
RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN

DECLARE _bdate VARCHAR(64);

SET _bdate = (SELECT CONCAT(First_Name, ' ', Last_Name, ' ', DATE_FORMAT(Birth, '%b %D, %Y'))   FROM Info);                
RETURN _bdate;

END //

DELIMITER ;
选择b日期('Marc','Smith','2009-12-06')

返回

马克·史密斯2009年12月6日


您的函数有一些错误

您再次调用了返回函数。使用_bdate绕过问题。 你的括号也太多了

DELIMITER //

CREATE FUNCTION bdate(
First_Name VARCHAR(32),
Last_Name VARCHAR(32),
Birth DATE)
RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN

DECLARE _bdate VARCHAR(64);

SET _bdate = (SELECT CONCAT(First_Name, ' ', Last_Name, ' ', DATE_FORMAT(Birth, '%b %D, %Y'))   FROM Info);                
RETURN _bdate;

END //

DELIMITER ;
选择b日期('Marc','Smith','2009-12-06')

返回

马克·史密斯2009年12月6日


您不需要局部变量。此外,最大长度应大于64

DELIMITER //

CREATE FUNCTION bdate(
First_Name VARCHAR(32),
Last_Name VARCHAR(32),
Birth DATE)
RETURNS VARCHAR(80)
LANGUAGE SQL
DETERMINISTIC
BEGIN
RETURN CONCAT(First_Name, ' ', Last_Name, ' ', DATE_FORMAT(Birth, '%b %D, %Y'));                
END //

DELIMITER ;
SELECT bdate('Marc', 'Smith', '2009-12-06') AS bd;

您不需要局部变量。此外,最大长度应大于64

DELIMITER //

CREATE FUNCTION bdate(
First_Name VARCHAR(32),
Last_Name VARCHAR(32),
Birth DATE)
RETURNS VARCHAR(80)
LANGUAGE SQL
DETERMINISTIC
BEGIN
RETURN CONCAT(First_Name, ' ', Last_Name, ' ', DATE_FORMAT(Birth, '%b %D, %Y'));                
END //

DELIMITER ;
SELECT bdate('Marc', 'Smith', '2009-12-06') AS bd;

为什么不使用bdate代替First_name来设置连接文本?我想如果我已经将First name设置为连接文本,并且选择了一个特定的名称,例如SELECT bdate(Marc);它会给我想要的结果,但它没有。我将其更改为bdate,但仍然得到相同的错误为什么不使用bdate而不是First_name来设置连接文本?我想如果我已将First name设置为连接文本,并选择了一个特定的名称,例如SELECT bdate(Marc);它会给我想要的结果,但它没有。我将其更改为bdate,但仍然得到相同的错误