嗨我在mysql数据库中有一个表,其中包含类似UI_12-Apr-2016,DA_12-Apr-2016的列。
----------------------------------------------------------------------
| DA_12-Apr-2016 | UI_13-Apr-2016 | UI_12-Apr-2016 | DA_13-Apr-2016 |
|---------------------------------------------------------------------
| |
----------------------------------------------------------------------
如何从列中包含2016年4月12日的表中获取数据。有没有办法根据标准选择数据。我知道我可以运行这个查询: -
SELECT UI_12-Apr-2016,DA_12-Apr-2016 from table;
但是它之前的日期和代码可以是任何东西。我想创建一个动态查询来从与日期条件匹配的列中获取数据。
如果有人能提供解决方案,我将非常感激。
答案 0 :(得分:2)
你的意思是:
SELECT * FROM table WHERE column LIKE '%13-Apr-2016%';
更新:您应该查看information_schema数据库:
SELECT COLUMN_NAME from `COLUMNS` where `TABLE_NAME` = 'table_name' AND `COLUMN_NAME` LIKE '%12-Apr-2016%';
简单的PHP示例脚本可以是:
$table_name = 'table_name';
$col_pattern = '12-Apr-2016';
$mysqli = new mysqli($config['host'], $config['user'], $config['password'], $config['dbname']);
$sql1 = "SELECT COLUMN_NAME from `COLUMNS` where `TABLE_NAME` = '{$table_name}' AND `COLUMN_NAME` LIKE '%{$col_pattern}%'";
$res1 = $mysqli->query($sql1);
$acol = array();
while ($r1 = $res1->fetch_assoc()) {
$acol[] = $r1['COLUMN_NAME'];
}
if (!empty($acol)) {
$sql2 = 'SELECT ' . implode(', ', $acol) . ' FROM ' . $table_name;
$res2 = $mysqli->query($sql2);
while ($r2 = $res2->fetch_assoc()) {
echo var_export($r2, 1) . PHP_EOL;
}
}
答案 1 :(得分:2)
This may help:
select COLUMN_name
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='Table1' and column_name like "%12-Apr-2016%";
in the above query, we can search for column names from INFORMATION_SCHEMA.COLUMNS table(which holds data related to table specified).
Output of above query should:
UI_12-Apr-2016
DA_12-Apr-2016
The result of above query is a list of columns with the pattern given(%12-Apr-2016%). You may save this result in a list and use it to fetch data accordingly from the table.
There is no direct method or query to do the same.
答案 2 :(得分:2)
也许您可以创建一个新表tbl_column
,其中一列column_name
包含所有列〜
SELECT * FROM tbl_column
WHERE column_name LIKE'%12-Apr-2016%';
然后你可以使用查询结果生成一个新的动态sql~
答案 3 :(得分:1)
如果您确实坚持使用MySQL的解决方案,那么有一个使用prepared statements的解决方案并不难以解决,如下所示:
set @table='your_table_name';
select group_concat(column_name)
from information_schema.columns
where table_name='your_table_name'
and column_name like '%12_Apr_2016'
into @colnames;
set @construct= CONCAT('SELECT ', @colnames, ' FROM ', @table);
prepare query from @construct;
execute query;
但总的来说,使用动态生成的DDL命名的列不是最好的模式建模实践。
答案 4 :(得分:1)
您必须动态地将SQL语句放在一起。例如。以下语句使用Oracle视图ALL_TAB_COLUMNS
为包含select column_name from table_name
的每个列生成12-Apr-2016
语句:
SELECT 'SELECT ' || COLUMN_NAME || ' FROM ' || TABLE_NAME || ';'
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'MY_TABLE'
AND COLUMN_NAME LIKE '%12-Apr-2016%'
这可能不是你想要的,但是,这说明了一般的想法。