簡體   English   中英

使用 MySql 8.0.17 上的存儲過程在數據庫上查找表名

[英]Find table name on the database using stored procedure on MySql 8.0.17

這是存儲數據庫的表的列表名稱MySql version 8.0.17

+------------------+
| listTable        |
+------------------+
| Table_A2_11_2021 |
| Table_L7_12_2021 |
| Table_C3_1_2021  |
| Table_D8_10_2021 |
| Table_T0_11_2021 |
| Table_E9_3_2021  |
| Table_L4_2_2021  |
| Table_O1_12_2021 |
| Table_P2_5_2021  |
| Table_Q2_10_2021 |
| Table_A3_12_2021 |
| Table_S5_9_2021  |
| Table_T8_11_2021 |
| Table_Q6_1_2021  |
+------------------+

table name存儲策略為

  • 桌子_
  • 西文字母(由識別連接用戶、權限等的算法發出)_
  • 隨機數_
  • 月數_
  • 今年

我需要在數據庫 MySql 上找到所有不帶Random_number的第一個Western alphabet letter的返回值

+-----------------+
| listTable       |
+-----------------+
| Table_A_11_2021 |
| Table_L_12_2021 |
| Table_C_1_2021  |
| Table_D_10_2021 |
| Table_T_11_2021 |
| Table_E_3_2021  |
| Table_L_2_2021  |
| Table_O_12_2021 |
| Table_P_5_2021  |
| Table_Q_10_2021 |
| Table_A_12_2021 |
| Table_S_9_2021  |
| Table_T_11_2021 |
| Table_Q_1_2021  |
+-----------------+

我有想法在下面使用這個存儲過程,但我無法在沒有Random number的情況下提取第一個Western alphabet letter

CREATE DEFINER=`root`@`%` PROCEDURE `SP_SIX_MONTHS`()
BEGIN

DECLARE tyear INT(4);
DECLARE tmonth INT(2);

SET tyear = YEAR(CURDATE());
SET tmonth = MONTH(DATE_SUB(CURDATE(),INTERVAL 6 MONTH));

SET @s = CONCAT('SELECT 
                 FROM information_schema.TABLES 
                 WHERE table_name LIKE ''table#_',???,'%#_',tmonth,'#_',tyear,''' ESCAPE ''#'';');                       
                                 
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END

更新

建議返回

+------------+
| t          |
+------------+
| Table_A_13 |
| Table_C_12 |
| Table_D_1  |
| Table_E_5  |
| Table_L_12 |
| Table_O_8  |
| Table_P_12 |
| Table_Q_6  |
| Table_S_14 |
| Table_T_4  |
+------------+
10 rows in set (0.12 sec)

嗯。 . . 我認為這實際上可以滿足您的要求:

select min(listtable)
from t
group by substr(listtable, 7, 1);

這將“第一個”解釋為“按字母順序排列的第一個”。

如果你不想要這個數字,你可以刪除它:

select min(insert(listtable, 8, 1, ''))
from t
group by substr(listtable, 7, 1);

是一個 db<>fiddle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM