2011-09-15 94 views
2

我有一個列有很多列。其中一些是DATETIME,我把它變成了帶有UNIX_TIMESTAMP()的Unix時間戳。所以我不必鍵入了所有其他列我從表中想要的,有沒有做這樣的事情的一種方式:選擇特定的列,以及其他

SELECT UNIX_TIMESTAMP(t.start) AS start, 
     UNIX_TIMESTAMP(t.end) AS end, 
     t.theOtherColumns 
FROM table t 

哪裏t.theOtherColumns是列在表中的其餘部分。進一步解釋;我想選擇表中的所有列,對其中的某些列執行操作,但不將每個列名輸入到查詢中。

當我這樣做,比方說,

SELECT UNIX_TIMESTAMP(t.start) AS start, 
     UNIX_TIMESTAMP(t.end) AS end, 
     t.theOtherColumns 
FROM table t 

它選擇startend兩次。我只想返回UNIX_TIMESTAMP()中的startend列,並從t.*集合中排除這些列。

+0

@Zoltan - 但那會帶回't,start'和't.end'。這個問題的答案是「否」BTW –

+0

好吧,我明白了。我不狡猾,那麼... – HamoriZ

+0

好的,謝謝你。值得一問,但。 – Bojangles

回答

1

我不相信有辦法做到這一點如你所說,但你可以做到這一點

SELECT t.*, UNIX_TIMESTAMP(t.start) AS start, UNIX_TIMESTAMP(t.end) as end ... 
+0

有一種方法可以完成。 [請參閱下面的答案。](http://stackoverflow.com/a/13880100/1639910) – donL

1

嘗試噸。*它的工作原理Oracle數據庫環境下。

2

你可以做的是使用this answer來幫助建立你想要的結果。

一個可能的解決方案看起來像

SET @sql = CONCAT('SELECT UNIX_TIMESTAMP(t.start) AS start, UNIX_TIMESTAMP(t.end) as end,', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'test' AND table_name = 
't' AND column_name NOT IN ('start', 'end')), 
' from test.t'); 
PREPARE stmt1 FROM @sql; 
EXECUTE stmt1; 

*與包含您的表T的模式的名稱替換測試。

相關問題