2011-03-14 78 views
1

我試圖從MySQL 5.5(社區服務器)中有總共22個字段的表中獲取記錄,第一個字段的類型是DATETIME,而我想要使用DATE_FORMAT()方法格式化該字段,而我想要按原樣提取其餘字段。所以基本上我想要做的就是這樣的事情SQL選擇單個字段作爲通配符的字段和剩餘字段的查詢

SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y'),* FROM userdetails;

雖然我知道這是無效的語法,和我目前選擇手動所有剩餘的字段這顯然使得查詢不再實現這一。那麼有沒有更好的方法來做同樣的事情?我也想過用兩個不同的查詢,其中第一個將獲取格式化的日期和第二將是平常

SELECT * FROM userdetails;

但因爲我取按日期字段本身進行排序的記錄,我想用兩個不同的查詢可能會導致衝突按照返回的記錄順序。

回答

2

您可以使用

SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y'), ud.* 
FROM userdetails ud 

這將選擇所有列(包括原fdate)與格式化的值一起。

沒有辦法選擇「幾乎所有列」,除非明確列出它們。

+0

謝謝!它工作的非常好...... – Kushal 2011-03-14 17:08:14

2

爲什麼不在應用程序代碼中進行日期格式化?讓數據庫處理數據並讓應用程序處理演示。

0
DATA_FORMAT(fdate,'%r %d-%m-%Y')..... 

不會工作

DATE_FORMAT(fdate,'%r %d-%m-%Y').... 
0
SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y') AS `formattedDate` , * FROM userdetails; 

這應該做的伎倆。不能證明爲什麼你的第一次努力失敗,你應該檢查它返回的字段名稱 - 懷疑你會發現一個名爲DATE_FORMAT(...

1

在MySQL中,你可以反轉它,並把*首先,然後列你只需要指定兩列fdate列如果你在Perl中使用哈希,或者在PHP中使用關聯數組或其他語言中的等價關係來獲取行,那麼你最終會覆蓋該索引。

對付它最好的辦法是name列:

SELECT *, DATE_FORMAT(fdate,'%r %d-%m-%Y') AS formatted_date FROM userdetails; 

現在你基本上有兩個日期列,你只要當你想使用你的日期時使用了命名的。

+0

語法無效,你需要在表中加上'*'前綴。 – Quassnoi 2011-03-14 16:04:41

+0

@ Quassnoi-你是對的。在MySQL中,您不必預先指定表別名,但必須先指定它,然後再指定其他列。更新以反映 – Cfreak 2011-03-14 16:28:02