在用户定义的函数中格式化日期(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)的主要内容,如果未能解决你的问题,请参考以下文章
R语言用户自定义函数的语法结构编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)应用自定函数
R语言用户自定义函数的语法结构编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)应用自定函数