2014-01-25 29 views
0

我有一個數據庫有數千個表,由1.1.1970(即time)以秒爲單位的UTC時間命名。我正在嘗試顯示大於時間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