2013-10-09 105 views

回答

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; 
+0

也許這對於瞭解SQL的人可能很簡單,但我非常喜歡這個。謝謝。 – juanpastas

0

簡短的回答是否定的。至少不是一種簡單的方法,因爲您無法在MySQL中的查詢中動態指定數據庫模式元素。所以你不能例如做:

SELECT (SHOW FIELDS ...) FROM table 

您可能會創建一個存儲過程動態構建SQL準備語句(或做與編程語言的應用程序/腳本類似)。

+0

@juanpastas當然你得到一個錯誤。我特別說過你不能做那樣的事情。我在說,因爲看起來你的希望是那樣的事情是可能的。我說的是,事實並非如此。你必須通過某種方式(無論是在應用程序邏輯還是在存儲過程中)逐字地構建一個包含所需SQL語句的字符串,然後執行它,因爲MySQL不允許在查詢中爲數據庫模式元素動態命名。 –

相關問題