2014-01-25 2 views
0

У меня есть база данных с тысячами таблиц, называемая временем UTC в секундах с 1.1.1970 (т. Е. time). Я стараюсь, чтобы отображали таблицы, превышающие время X и меньше времени Y. Мне известно, как использовать оператор select для выполнения математических операций с результатами запроса из одной таблицы, но я не могу понять, как это сделать в имени таблицы.Математическая операция по имени таблицы MySQL

Вот идея о том, что я пытаюсь сделать:

SHOW TABLES FROM DATABASE history WHERE TABLENAME.SUBSTRING(4, LEN(TABLENAME) - 4) > TimeX AND TABLENAME.SUBSTRING(4, LEN(TABLENAME) - 4) < TimeY; 

Я понимаю, это никоим образом не напоминает действительное заявление MySql, но я думаю, что это помогает объяснить, что я пытаюсь выполнить , Ваше время ценится, спасибо.

UPDATE: Спасибо Eugen, итоговое заявление я использовал СЛЕДУЮЩЕЕ:

SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='db_time' AND CAST(SUBSTRING(TABLE_NAME,2) AS UNSIGNED) > 1383072311 AND CAST(SUBSTRING(TABLE_NAME,2) AS UNSIGNED) < 1383130756 ORDER BY CAST(SUBSTRING(TABLE_NAME,2) AS UNSIGNED) ASC LIMIT 1; 
+0

Можете ли вы привести несколько примеров того, как на самом деле выглядят имена таблиц? –

ответ

2
SELECT TABLE_NAME FROM information_schema 
WHERE TABLE_SCHEMA='your_database_name' 
AND TABLE_NAME.SUBSTRING(4, LEN(TABLE_NAME) - 4) > 'TimeX' 
AND TABLE_NAME.SUBSTRING(4, LEN(TABLE_NAME) - 4) < 'TimeY'; 
1

Попробуйте ниже один, я объяснил ему, например, используя тестовую базу данных с именем в мире.

use world 

Создано несколько примеров таблиц

CREATE TABLE `1.1.1970` (id INT); 
CREATE TABLE `1.1.1971` (id INT); 
CREATE TABLE `1.1.2003` (id INT); 
CREATE TABLE `1.1.2013` (id INT); 

Ниже запроса будут перечислены таблицы в заданном диапазоне, но вам необходимо передать значения в качестве стандартного формата даты MySQL «1970-01-01» вместо 1.1.1970

SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'world' 
AND STR_TO_DATE(REPLACE(TABLE_NAME,'.','-'),'%d-%m-%Y') > '1970-01-01' 
AND STR_TO_DATE(REPLACE(TABLE_NAME,'.','-'),'%d-%m-%Y') < '2003-01-01'; 

Gives output 1.1.1971. 
+0

Вы, кажется, пропустили, что таблицы называются с временными отметками эпохи Unix. – jeremycole

Смежные вопросы