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 のクエリで DB スキーマ要素を動的に指定することはできないため、少なくとも簡単な方法ではありません。したがって、たとえば次のことはできません。
SELECT (SHOW FIELDS ... ) FROM table
ストアド プロシージャを作成して、SQL 準備済みステートメントを動的に構築する (または、プログラミング言語を使用したアプリケーション/スクリプトで同様のことを行う) 可能性があります。