2017-02-21 52 views
0

我有MySQL数据库名称“连接跟踪”与下表MySQL的打印数据范围

[email protected]:/temp# mysql -uroot -pMYSQLPASS "use conntrack; show tables;" 
+------------+ 
| 2016-11-24 | 
| 2016-11-25 | 
| 2016-11-26 | 
| 2016-11-27 | 
| 2016-11-28 | 
| 2016-11-29 | 
| 2016-11-30 | 
+------------+ 

表有如下结构,(例如)

mysql> describe `2016-12-25`; 
+----------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+-------+ 
| time  | time  | NO | MUL | NULL |  | 
| username | varchar(32) | NO | MUL | NULL |  | 
| srcip | varchar(15) | NO | MUL | NULL |  | 
| srcport | varchar(5) | NO | MUL | NULL |  | 
| dstip | varchar(15) | NO | MUL | NULL |  | 
| dstport | varchar(5) | NO | MUL | NULL |  | 
| protocol | char(1)  | NO |  | NULL |  | 
+----------+-------------+------+-----+---------+-------+ 

我想从dstport领域桌子范围2016-11-24至2016-11-26开始。如何使用单线命令做到这一点?

+0

嗯UNION '联盟(从'2016-11-27' SELECT dstport)(从'2016-11-24' SELECT dstport);' 上述命令将显示来自仅这两个日期数据? 或它会得到数据BETWEEN ** 24至27 **? –

+0

仅限这两个日期,不适用于25-26。 – Nitin

+0

如何结合或合并来自RANGE的结果(根据我的情况需要) 表名以日期格式显示,所以我想从表格范围获取记录(liek 2016-11-24至2016-11-26) –

回答

1

试试这个:

SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME BETWEEN '2016-11-24' AND '2016-11-26' 

编辑

SET @S = NULL; 
SELECT GROUP_CONCAT(CONCAT('SELECT DSTPORT FROM `', TABLE_NAME, '`') SEPARATOR ' UNION ') INTO @S 
FROM (
    SELECT DISTINCT TABLE_NAME, 1 AS GRP 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME BETWEEN '2016-11-24' AND '2016-11-26' 
) T 
GROUP BY GRP; 
PREPARE STMT FROM @S; 
EXECUTE STMT; 
DEALLOCATE PREPARE STMT; 

不知道这是你想要的或没有,但尝试。

+0

这显示了两个表的表结构, 我想从两个表(或表的范围)中获得dstport列记录 –

+0

@SyedJahanzaib请在op上发布您想要的结果。 – Blank

+0

我已更新问题(使用您提供的命令restul) –