自定义函数,名字自拟,结合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');
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
不知道你这个问题是否已经解决, 如果还没有解决的话:序号 | 函数 | 说明 |
---|---|---|
1 | USER() | 返回当前用户 |
2 | SESSION_USER() | 返回当前用户 |
3 | SYSTEM_USER() | 返回当前用户 |
4 | CURRENT_USER() | 返回当前用户 |
5 | VERSION() | 返回数据库的版本号 |
6 | DATABASE() | 返回当前数据库名 |
7 | COALESCE(expr1, expr2, …, expr_n) | 返回参数中的第一个非空表达式(从左向右) |
8 | CONNECTION_ID() | 返回唯一的连接 ID |
9 | CONV(x,f1,f2) | 返回 f1 进制数变成 f2 进制数 |
10 | CONVERT(s USING cs) | 函数将字符串 s 的字符集变成 cs |
11 | CAST(x AS type) | 转换数据类型 |
12 | BINARY(s) | 将字符串 s 转换为二进制字符串 |
13 | BIN(x) | 返回 x 的二进制编码 |
14 | IF(expr,v1,v2) | 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2 |
15 | IFNULL(v1,v2) | 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 |
16 | ISNULL(expression) | 判断表达式是否为 NULL |
17 | LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值 |
18 | NULLIF(expr1, expr2) | 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 |
19 | CASE 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中的CREATE FUNCTION语句来创建自定义函数,在函数内部使用DATE_FORMAT函数来格式化日期并使用WEEKDAY函数来获取日期对应的星期。具体步骤如下:
连接到MySQL数据库。
使用CREATE FUNCTION语句来定义一个函数,指定函数名、输入参数以及返回类型。例如:
CREATE FUNCTION get_weekday(date_input DATE) RETURNS VARCHAR(10)
这将创建一个名为get_weekday的函数,并指定输入参数为一个日期类型的变量date_input,返回一个长度为10的字符串。
set date_str = DATE_FORMAT(date_input, '%Y-%m-%d');
这将把输入的日期格式化为“年-月-日”的形式,并保存在date_str变量中。
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选择分支语句将星期值转换为“星期一”、“星期二”等形式。
RETURN weekday_str;
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;
SELECT get_weekday('2020-12-18');
输出结果为:
+-----------------------+
| get_weekday('2020-12-18') |
+-----------------------+
| 星期五 |
+-----------------------+