在用户定义的函数中格式化日期(mysql)

Posted

技术标签:

【中文标题】在用户定义的函数中格式化日期(mysql)【英文标题】:Formatting a date inside a user-defined function (mysql) 【发布时间】:2019-04-06 15:04:03 【问题描述】:

我已经完成了一项学校作业,但如果我在用户定义的函数中格式化日期,我会获得额外的学分。这是工作代码:

DROP FUNCTION IF EXISTS in_sentence_form;

DELIMITER $$

CREATE FUNCTION in_sentence_form (u_name TEXT, b_date DATE)
RETURNS TEXT DETERMINISTIC
BEGIN
    DECLARE full_sentence TEXT;
    SET full_sentence = CONCAT(u_name,' was born on ',b_date,'.');
    RETURN full_sentence;
END$$

DELIMITER ;

但是,输出只是“John Doe 出生于 2001-01-01”(左边是名字,右边是日期);但如果我希望输出显示为:“John Doe 出生于 2001 年 1 月 1 日,星期三。”?

我知道如何格式化日期:

DATE_FORMAT(b_date, '%W %D %M %Y');

但在“the”、“of”、“”等说明符之间插入字符串和字符被证明是不可能的。

在线搜索不起作用,因为我的搜索词必须与其他人使用的日期字符串几乎完全相同

【问题讨论】:

我已经弄清楚了在日期元素之间混合字符和单词的语法: SELECT CONCAT('Jaron Jones was Born on ', DATE_FORMAT('2001-05-01','%W' ), ", the", DATE_FORMAT('2001-05-01','%D'), "天", DATE_FORMAT('2001-05-01','%M'), ", ",DATE_FORMAT( '2001-05-01','%Y'),".") 作为生日;但现在我只需要在用户定义的函数中获取所有这些内容! 想通了。这是 SET 行: SET full_sentence = CONCAT(u_name,' wasbirth on ', DATE_FORMAT(b_date,'%W'), ", the ", DATE_FORMAT(b_date,'%D'), " day of ", DATE_FORMAT (b_date,'%M'), ", ", DATE_FORMAT(b_date,'%Y'),"."); 请注意,这里写的是存储的函数,不是用户定义的函数。用户定义函数 (UDF) 是用 C 或 C++ 编写的,而不是 SQL:dev.mysql.com/doc/refman/8.0/en/adding-udf.html 【参考方案1】:

您可以在格式字符串中插入文字。

date_format(b_date, '%W, the %D of %M, %Y')

例如:

SELECT date_format(now(), '%W, the %D of %M, %Y');

会导致

Saturday, the 6th of April, 2019

db<>fiddle

【讨论】:

以上是关于在用户定义的函数中格式化日期(mysql)的主要内容,如果未能解决你的问题,请参考以下文章

如何在查询语句 Mysql 中格式化日期?

R语言用户自定义函数的语法结构编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)应用自定函数

js 日期格式化函数(可自定义)

mysql 中,创建表时如何定义一个日期类型的字段

R语言用户自定义函数的语法结构编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)应用自定函数

如何在 SQL Server中 将日期格式化