show fields from table where type in ('date', 'datetime')
返回我想要的字段,有没有办法把这个输出放在:
select * from table
即替换*?
可能不是最优雅的解决方案,但这应该可行。
/* 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;
最简洁的答案是不。至少不是以简单的方式,因为您不能在 MySQL 的查询中动态指定数据库模式元素。所以你不能例如这样做:
SELECT (SHOW FIELDS ... ) FROM table
您可能会创建一个存储过程来动态构建 SQL 准备语句(或在具有编程语言的应用程序/脚本中执行类似操作)。