从MySQL中选择N个特定表

时间:2016-07-30 06:43:01

标签: mysql sql regex bash

我有一个mysql数据库,其中有100个表名为table_1,table_2,table_3等... 在我的bash脚本中,我只想从table_20到table_29一次选择10个表。我尝试了以下代码:

show tables where Tables_in_db REGEXP '^table_[20-29]'

但它将2,0,9视为单独的数字,而不是将20和29视为数字。

我该如何修改我的查询?

3 个答案:

答案 0 :(得分:5)

匹配table_20table_29的表名的数字序列的正则表达式是:

^table_2[0-9]

所以你的查询应该是:

SHOW TABLES WHERE Tables_in_db REGEXP '^table_2[0-9]'

答案 1 :(得分:0)

如果您可以使用外部工具,那么awk就是您的朋友,例如:

mysql -u root -p -se "show tables from db_name" | awk '/^table_2[0-9]$/'

这可以为您提供table_(20-29)。注意使用mysql -s来摆脱格式化。

答案 2 :(得分:0)

您可以使用INFORMATION_SCHEMA.TABLES

SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'table_%'
ORDER BY CAST(REPLACE(TABLE_NAME, 'table_', '') AS INT)
LIMIT 20,10;

工作原理:

  1. 获取具有特定名称约定的所有表格,即以table_

  2. 开头
  3. 按数字后缀排序

  4. 使用LIMIT offset, count

  5. 我不知道您的具体架构,但是多个具有共同前缀的表可能表示设计不佳。

    相关:SELECT * FROM sales + @yymm