show fields from table where type in ('date', 'datetime')
返回我想要的領域,有沒有把這種輸出方式:選擇只是日期/日期時間字段SQL
select * from table
即更換*?
show fields from table where type in ('date', 'datetime')
返回我想要的領域,有沒有把這種輸出方式:選擇只是日期/日期時間字段SQL
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準備語句(或做與編程語言的應用程序/腳本類似)。
@juanpastas當然你得到一個錯誤。我特別說過你不能做那樣的事情。我在說,因爲看起來你的希望是那樣的事情是可能的。我說的是,事實並非如此。你必須通過某種方式(無論是在應用程序邏輯還是在存儲過程中)逐字地構建一個包含所需SQL語句的字符串,然後執行它,因爲MySQL不允許在查詢中爲數據庫模式元素動態命名。 –
也許這對於瞭解SQL的人可能很簡單,但我非常喜歡這個。謝謝。 – juanpastas