我有一个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视为数字。
我该如何修改我的查询?
答案 0 :(得分:5)
匹配table_20
到table_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;
工作原理:
获取具有特定名称约定的所有表格,即以table_
按数字后缀排序
使用LIMIT offset, count
我不知道您的具体架构,但是多个具有共同前缀的表可能表示设计不佳。