我有一个MySQL数据库,并有100个表中名为,table_1,table_2,table_3等... 在我的bash脚本中,我只想从table_20中选择10个表格table_29。我试了下面的代码:从MySQL中选择N个特定的表
show tables where Tables_in_db REGEXP '^table_[20-29]'
但它把2,0,9作为单独的数字,而不是将20和29识别为数字。
我该如何修改我的查询?
我有一个MySQL数据库,并有100个表中名为,table_1,table_2,table_3等... 在我的bash脚本中,我只想从table_20中选择10个表格table_29。我试了下面的代码:从MySQL中选择N个特定的表
show tables where Tables_in_db REGEXP '^table_[20-29]'
但它把2,0,9作为单独的数字,而不是将20和29识别为数字。
我该如何修改我的查询?
如果你可以使用外部工具,那么awk
是你的朋友,例如:
mysql -u root -p -se "show tables from db_name" | awk '/^table_2[0-9]$/'
这给你table_(20-29)如您所愿。请注意0用mysql来摆脱格式。
你可以使用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
我不知道你的特定的模式,但多个具有通用前缀的表可以表明设计不佳。
'table_NN'通常是设计模式的一种不好的方法。 –
以及我只是使用数据库,而不是设计它 – pku