1
show fields from table where type in ('date', 'datetime')

返回我想要的字段,有没有办法把这个输出放在:

select * from table

即替换*?

4

2 回答 2

3

可能不是最优雅的解决方案,但这应该可行。

/* set your values */
SET @tablename = 'mytablename';
SET @schemaname = 'mydbname';
/* end */

SET @columns = '';
SET @query1 = '
(SELECT
    GROUP_CONCAT(`COLUMN_NAME`) INTO @columns 
FROM 
    `information_schema`.`COLUMNS` 
WHERE 
    `TABLE_SCHEMA` = ? 
AND 
    (`DATA_TYPE` = "datetime" OR `DATA_TYPE` = "date")
AND 
    `TABLE_NAME` = ?)';
PREPARE smtm FROM @query1;
EXECUTE smtm USING @schemaname, @tablename;


SET @query2 = CONCAT('SELECT ', @columns, ' FROM ', @tablename);
PREPARE smtm FROM @query2;
EXECUTE smtm;
于 2013-10-09T22:43:04.513 回答
0

最简洁的答案是不。至少不是以简单的方式,因为您不能在 MySQL 的查询中动态指定数据库模式元素。所以你不能例如这样做:

SELECT (SHOW FIELDS ... ) FROM table

您可能会创建一个存储过程来动态构建 SQL 准备语句(或在具有编程语言的应用程序/脚本中执行类似操作)。

于 2013-10-09T21:35:49.920 回答