2010-11-16 106 views
2

有沒有辦法抓住一天的最近時間。如果您的數據庫中的數據格式化爲上午07:00和晚上08:00以及中午12:00。 Sorta像max()。但是那個時候。在一個Mysql查詢中。MYSQL最近的時間

感謝 埃裏克

+0

什麼是您的列的類型? – 2010-11-16 20:41:08

+0

其Char字段 – Eric 2010-11-16 20:59:18

回答

3

最好以另一種格式存儲它,而不是文本。或者至少以24小時格式存儲它,然後簡單的排序就可以工作。將數據顯示給用戶時,可以將其轉換爲12小時格式。

不過,假設你不能改變你的數據庫模式,試試這個:

SELECT * 
FROM your_table 
ORDER BY STR_TO_DATE(your_time, '%h:%i%p') DESC 
LIMIT 1 

注意,這將無法使用索引來進行排序。

+2

這也得到了「12:.....」號碼錯誤。你需要有四個排序字段,左= 12am,然後右(your_time),然後左= 12pm,然後是your_time。 – 2010-11-16 20:42:34

+0

// @本·李:哦,是的,我完全忘記了上午12:00應該在* 01:00之前排序。有效'12:'應該按照'00:'排序。所以解決這個問題的另一種方法可能是在用'00:'替換'12:'之後按字段排序。 – 2010-11-16 20:47:45

+0

即使您所做的改變,仍然會在列表的最頂端「中午12:00」(中午)和「下午12:59」之間的任何地方,而不是中間。您需要將REPLACE函數放入兩個參數中,如下所示:RIGHT(REPLACE(your_time,'12:','00:'),2)DESC,REPLACE(your_time,'12:','00:' )DESC' – 2010-11-16 20:57:38

-1

你可以排序。

select time_column from table order by time_column desc limit 1; 
+1

不,他不能。它是一個字符串字段,它有上午和下午的部分 – 2010-11-16 20:43:11

0

假設你正在處理您的MySQL中的日期時間字段,你可以使用這個查詢來獲取每天的最大時間:

SELECT DATE(YourDateField), MAX(TIME(YourDateField)) FROM YourTable 
GROUP BY DATE(YourDateField) 

當你正在處理一個VARCHAR字段,你可以嘗試破解像這樣:

SELECT YourDateField, SUBSTRING(MAX(
    CASE WHEN YourTimeField LIKE '%AM%' THEN '0' ELSE '1' END 
    + REPLACE(YourTimeField, '12:', '00:') 
), 2) 
GROUP BY YourDateField 
+0

他說他沒有處理日期時間字段,但字符串字段是am/pm – 2010-11-16 20:43:53

+0

不是,他說他的字段是*格式化的AM/PM。他沒有提到他的領域的類型。 – thomaspaulb 2010-11-16 20:49:52

1

如果您使用字符串,則應該嘗試STR_TO_DATE()。如果你的時間總是被格式化爲HH:mmAMPM,你可以使用:

MAX(STR_TO_DATE(YourTimeField,'%h:%i%p')) 

這是你的字符串轉換成時間,沒有任何必要通過串或任何其要分割,因此MySQL會再看到上午09點07分如09:07:00和02:35 PM爲14:35:00,然後很容易就能確定它的MAX。

+0

而且我輸入的答案太慢了:-P – spanky 2010-11-16 21:19:31

+0

+1無論如何因爲注意到現在只有一個字段被選中,所以MAX將工作。在將其更改爲使用STR_TO_DATE之後,我沒有更新我的答案以使用MAX。 – 2010-11-16 21:22:28

0

如果完全有可能,最好的選擇是將字段轉換爲datetime。然後:

  • 你可以使用MAX()得到最近的日期
  • 如果你需要他們後來
  • MySQL將提供一些基本的類型檢查,您將有機會獲得其他日期和時間功能,輸入驗證
+0

如何在php中自動填充日期時間字段? – Eric 2010-11-16 21:32:05

+0

如果您有時間戳,可以使用PHP的date()函數或MySQL的FROM_UNIXTIME函數將其轉換爲MySQL日期時間格式。否則,只需使用YYYY-MM-DD hh:mm:ss格式,使用24小時制填充它。 – 2010-11-18 17:04:04