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