mariadb,如何在存储过程中查找数组中元素的索引
mariadb, How to find the index of an element in an array in a stored procedure
我正在写一个存储过程,在过程中我有一个数组["sunday"、"monday"、"tuesday"、"wednesday"、"thursday"、 "friday"、"saturday"]
我有一个查询 return 是星期几,我想 return 从上面的数组中 returned 日期的索引。
我可以每天写一个 IF THEN ELSE 测试,但是有没有更优雅的方法使用内置函数来做同样的事情?
IF vcSOW = 'sunday' THEN
SET intSOW = 0;
ELSEIF vcSOW = 'monday' THEN
SET intSOW = 1;
ELSEIF vcSOW = 'tuesday' THEN
SET intSOW = 2;
ELSEIF vcSOW = 'wednesday' THEN
SET intSOW = 3;
ELSEIF vcSOW = 'thursday' THEN
SET intSOW = 4;
ELSEIF vcSOW = 'friday' THEN
SET intSOW = 5;
ELSEIF vcSOW = 'saturday' THEN
SET intSOW = 6;
ELSE
CALL procLogError(vcCompKey, CONCAT("Invalid start of week:", vcSOW));
LEAVE exitProc;
END IF;
因此,如果 returned 日期是 "sunday",则索引 returned 将为 0,如果 "saturday" 则 returned 索引将为是 6.
提示:
mysql> SELECT FIND_IN_SET('monday', 'sunday,monday,tuesday,...');
+----------------------------------------------------+
| FIND_IN_SET('monday', 'sunday,monday,tuesday,...') |
+----------------------------------------------------+
| 2 |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT FIND_IN_SET('Junk', 'sunday,monday,tuesday,...');
+--------------------------------------------------+
| FIND_IN_SET('Junk', 'sunday,monday,tuesday,...') |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+
1 row in set (0.00 sec)
所以,类似于:
SELECT @dow := FIND_IN_SET(intSOW, 'sunday,monday,tuesday,...') - 1;
IF (@dow < 0) THEN
CALL ...
END IF
我正在写一个存储过程,在过程中我有一个数组["sunday"、"monday"、"tuesday"、"wednesday"、"thursday"、 "friday"、"saturday"]
我有一个查询 return 是星期几,我想 return 从上面的数组中 returned 日期的索引。
我可以每天写一个 IF THEN ELSE 测试,但是有没有更优雅的方法使用内置函数来做同样的事情?
IF vcSOW = 'sunday' THEN
SET intSOW = 0;
ELSEIF vcSOW = 'monday' THEN
SET intSOW = 1;
ELSEIF vcSOW = 'tuesday' THEN
SET intSOW = 2;
ELSEIF vcSOW = 'wednesday' THEN
SET intSOW = 3;
ELSEIF vcSOW = 'thursday' THEN
SET intSOW = 4;
ELSEIF vcSOW = 'friday' THEN
SET intSOW = 5;
ELSEIF vcSOW = 'saturday' THEN
SET intSOW = 6;
ELSE
CALL procLogError(vcCompKey, CONCAT("Invalid start of week:", vcSOW));
LEAVE exitProc;
END IF;
因此,如果 returned 日期是 "sunday",则索引 returned 将为 0,如果 "saturday" 则 returned 索引将为是 6.
提示:
mysql> SELECT FIND_IN_SET('monday', 'sunday,monday,tuesday,...');
+----------------------------------------------------+
| FIND_IN_SET('monday', 'sunday,monday,tuesday,...') |
+----------------------------------------------------+
| 2 |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT FIND_IN_SET('Junk', 'sunday,monday,tuesday,...');
+--------------------------------------------------+
| FIND_IN_SET('Junk', 'sunday,monday,tuesday,...') |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+
1 row in set (0.00 sec)
所以,类似于:
SELECT @dow := FIND_IN_SET(intSOW, 'sunday,monday,tuesday,...') - 1;
IF (@dow < 0) THEN
CALL ...
END IF