SQL查询使用MySQL查找数据库上的所有表名

问题描述

这些是数据库 MysqL 版本 8.0.17 上的表列表

t_contents_s300_10_2021
t_contents_s300_1_2021
t_contents_s300_2_2021
t_contents_s300_3_2021
t_contents_s34d_1_2021
t_contents_s34g_1_2021
t_contents_s34g_2_2021
t_contents_s3sv_1_2021
t_contents_s3sv_2_2021

我需要在此表列表中找到所有表,例如 s312021

我试过这个查询,但返回包含所有数字,而不仅仅是 1

如何解决这个问题?

在此先感谢您的帮助。

MysqL> SELECT
    table_name 
FROM
    information_schema.TABLES 
WHERE
    table_name LIKE ( 't_contents_s3%' );
+-------------------------+
| TABLE_NAME              |
+-------------------------+
| t_contents_s300_10_2021 |
| t_contents_s300_1_2021  |
| t_contents_s300_2_2021  |
| t_contents_s300_3_2021  |
| t_contents_s34d_1_2021  |
| t_contents_s34g_1_2021  |
| t_contents_s34g_2_2021  |
| t_contents_s3sv_1_2021  |
| t_contents_s3sv_2_2021  |
+-------------------------+
9 rows in set (0.44 sec)

解决方法

LIKE 是一个很好的方向:

SELECT  table_name 
FROM  information_schema.TABLES 
WHERE  table_name LIKE  't#_contents#_s3%#_1#_2021' ESCAPE '#';

或者如果 s3% 部分总是有 4 个字符,则:

SELECT  table_name 
FROM  information_schema.TABLES 
WHERE  table_name LIKE  't#_contents#_s3__#_1#_2021' ESCAPE '#';

ESPACE 允许将 _ 视为 _ 而不是单个字符通配符。