MySQL函数,对于函数这些不是很理解

自定义函数,名字自拟,结合IF选择分支语句,当函数传入一个日期,比如‘2020-12-18’时,能返回这个日期所在的星期,返回中国人习惯的“星期一”、“星期二”等形式,该怎么做呀?

DELIMITER //
CREATE FUNCTION DayOfWeek(date_val DATE)
RETURNS VARCHAR(10)
DETERMINISTIC
BEGIN
  DECLARE w INTEGER;

  SET w = WEEKDAY(date_val);

  RETURN CASE w
         WHEN 0 THEN '星期一'
         WHEN 1 THEN '星期二'
         WHEN 2 THEN '星期三'
         WHEN 3 THEN '星期四'
         WHEN 4 THEN '星期五'
         WHEN 5 THEN '星期六'
         WHEN 6 THEN '星期日'
         END;
END //
DELIMITER ;
调用
SELECT DayOfWeek('2020-12-18');

SELECT week_of_day('2020-12-18');

img


CREATE DEFINER=`root`@`localhost` FUNCTION `week_of_day`(date_val DATE) RETURNS varchar(10) CHARSET utf8mb4
    DETERMINISTIC
BEGIN
   DECLARE week_day VARCHAR(10);
       IF WEEKDAY(date_val) = 0 THEN
           SET week_day = '星期一';
       ELSEIF WEEKDAY(date_val) = 1 THEN
           SET week_day = '星期二';
       ELSEIF WEEKDAY(date_val) = 2 THEN
           SET week_day = '星期三';
       ELSEIF WEEKDAY(date_val) = 3 THEN
           SET week_day = '星期四';
       ELSEIF WEEKDAY(date_val) = 4 THEN
           SET week_day = '星期五';
       ELSEIF WEEKDAY(date_val) = 5 THEN
           SET week_day = '星期六';
       ELSE
           SET week_day = '星期日';
       END IF;
       RETURN week_day;
END
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7476528
  • 这篇博客你也可以参考下:MySQL中的数据类型 [数值型、字符串型、时间日期型]
  • 除此之外, 这篇博客: 收藏多年的MySQL函数大全笔记,笔记一生一起走,那些日子不再有!中的 七、其他函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    序号函数说明
    1USER()返回当前用户
    2SESSION_USER()返回当前用户
    3SYSTEM_USER()返回当前用户
    4CURRENT_USER()返回当前用户
    5VERSION()返回数据库的版本号
    6DATABASE()返回当前数据库名
    7COALESCE(expr1, expr2, …, expr_n)返回参数中的第一个非空表达式(从左向右)
    8CONNECTION_ID()返回唯一的连接 ID
    9CONV(x,f1,f2)返回 f1 进制数变成 f2 进制数
    10CONVERT(s USING cs)函数将字符串 s 的字符集变成 cs
    11CAST(x AS type)转换数据类型
    12BINARY(s)将字符串 s 转换为二进制字符串
    13BIN(x)返回 x 的二进制编码
    14IF(expr,v1,v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2
    15IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
    16ISNULL(expression)判断表达式是否为 NULL
    17LAST_INSERT_ID()返回最近生成的 AUTO_INCREMENT 值
    18NULLIF(expr1, expr2)比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
    19CASE expression
    WHEN condition1 THEN
    result1
    WHEN condition2 THEN
    result2

    WHEN conditionN THEN
    resultN
    ELSE result
    END
    CASE 表示函数开始,END 表示函数结束。
    如果 condition1 成立,则返回 result1,
    如果 condition2 成立,则返回 result2,
    当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。

    举例:CONV(x,f1,f2)返回 f1 进制数变成 f2 进制数

    SELECT CONV(13,10,2);
    

    结果:

    1101
    

  • 您还可以看一下 刘运强老师的MySQL数据库从入门到实战课课程中的 慢查询日志小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    可以使用MySQL中的CREATE FUNCTION语句来创建自定义函数,在函数内部使用DATE_FORMAT函数来格式化日期并使用WEEKDAY函数来获取日期对应的星期。具体步骤如下:

    1. 连接到MySQL数据库。

    2. 使用CREATE FUNCTION语句来定义一个函数,指定函数名、输入参数以及返回类型。例如:

    CREATE FUNCTION get_weekday(date_input DATE) RETURNS VARCHAR(10)
    

    这将创建一个名为get_weekday的函数,并指定输入参数为一个日期类型的变量date_input,返回一个长度为10的字符串。

    1. 在函数内部,使用DATE_FORMAT函数将日期格式化为“%Y-%m-%d”形式。例如:
    set date_str = DATE_FORMAT(date_input, '%Y-%m-%d');
    

    这将把输入的日期格式化为“年-月-日”的形式,并保存在date_str变量中。

    1. 使用WEEKDAY函数获取date_str对应的星期值,注意星期值返回的是0-6,需要转换为“星期一”、“星期二”等形式。例如:
    set weekday_value = WEEKDAY(date_input);
    set weekday_str = IF(weekday_value = 0, '星期一',
                  IF(weekday_value = 1, '星期二',
                  IF(weekday_value = 2, '星期三',
                  IF(weekday_value = 3, '星期四',
                  IF(weekday_value = 4, '星期五',
                  IF(weekday_value = 5, '星期六',
                  IF(weekday_value = 6, '星期日', '')))))));
    

    这将获取date_str对应的星期值,并使用IF选择分支语句将星期值转换为“星期一”、“星期二”等形式。

    1. 最后,在函数中返回weekday_str变量即可,例如:
    RETURN weekday_str;
    
    1. 完整的函数代码如下所示:
    CREATE FUNCTION get_weekday(date_input DATE) RETURNS VARCHAR(10)
    BEGIN
      DECLARE date_str VARCHAR(10);
      DECLARE weekday_str VARCHAR(10);
      DECLARE weekday_value INT;
    
      SET date_str = DATE_FORMAT(date_input, '%Y-%m-%d');
      SET weekday_value = WEEKDAY(date_input);
      SET weekday_str = IF(weekday_value = 0, '星期一',
                  IF(weekday_value = 1, '星期二',
                  IF(weekday_value = 2, '星期三',
                  IF(weekday_value = 3, '星期四',
                  IF(weekday_value = 4, '星期五',
                  IF(weekday_value = 5, '星期六',
                  IF(weekday_value = 6, '星期日', '')))))));
    
      RETURN weekday_str;
    END;
    
    1. 调用函数来获取输入日期对应的星期:
    SELECT get_weekday('2020-12-18');
    

    输出结果为:

    +-----------------------+
    | get_weekday('2020-12-18') |
    +-----------------------+
    | 星期五                |
    +-----------------------+
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^