首页 > 解决方案 > 用于连接名称和日期的 SQL 存储函数

问题描述

我正在尝试编写一个接受日期 (2020-09-04) 和名称的存储函数,然后返回一个字符串,例如名称生日是 2020 年 9 月 4 日。我从下面开始并找到了问题。

DELIMITER //
CREATE FUNCTION concatenate(X CHAR(24),Y date date))
Returns CHAR(50)
BEGIN
declare month char(20);
SELECT month(date, %m) into month;
Return concat(X, 'Birthday is', ' ', month);
END//

DELIMITER ;

标签: mysqlsqlstored-functions

解决方案


您需要格式化您想要的日期,因为您必须像 PSalmon 建议的那样使用DATE_FORMAT 。

不应使用像 MONTH 这样的保留字,这会导致注意到的错误,但出于您的目的,使用像 @month 这样的用户定义变量会更简单

利用

DELIMITER //
CREATE FUNCTION concatenate(X CHAR(24),Y date )
Returns CHAR(50)
DETERMINISTIC
BEGIN
declare _month char(20);
SELECT DATE_FORMAT(Y, '%b %d, %Y') INTO _month;
Return concat(X, "'s Birthday is ", _month);
END//

DELIMITER ;

结果

# concatenate('temp','2020-01-01')
temp's Birthday is Jan 01, 2020

或者你使用

DELIMITER //
CREATE FUNCTION concatenate(X CHAR(24),Y date )
Returns CHAR(50)
DETERMINISTIC
BEGIN
SELECT DATE_FORMAT(Y, '%b %d, %Y') INTO @month;
Return concat(X, "'s Birthday is ", @month);
END//

DELIMITER ;

推荐阅读