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 のクエリで DB スキーマ要素を動的に指定することはできないため、少なくとも簡単な方法ではありません。したがって、たとえば次のことはできません。

SELECT (SHOW FIELDS ... ) FROM table

ストアド プロシージャを作成して、SQL 準備済みステートメントを動的に構築する (または、プログラミング言語を使用したアプリケーション/スクリプトで同様のことを行う) 可能性があります。

于 2013-10-09T21:35:49.920 に答える