2013-07-10 251 views
0
SELECT SUBSTR(`filename`, 1, 10) as filedate, `filename`, `filepath` 
FROM `files` 
WHERE `filepath` LIKE 'sites/default/files/news/%' 
ORDER BY DATE_FORMAT(filedate,'%m.%d.%Y') ASC 

文件名包括前10個字符中的日期例如: 2013年6月28日 - Title_of_file 所以我搶的子字符串並將其設置爲FILEDATE,與在那裏同樣DATE_FORMAT命令無法正常工作

然後我嘗試以通過使用DATE_FORMAT日期過濾器,但是當我運行查詢它不會正確排序。

我必須將其轉換爲日期格式嗎?如果是這樣,那麼我怎麼在SQL中做到這一點?

在此先感謝

+0

你能展示更多你的樣本行嗎?你有日期類型的列還是文件名前綴? –

回答

2
SELECT STR_TO_DATE(SUBSTR(`filename`, 1, 10),'%m.%d.%Y') as filedate, `filename`, `filepath` 
FROM `files` 
WHERE `filepath` LIKE 'sites/default/files/news/%' 
ORDER BY filedate ASC 

這會將被剝離的字符串轉換爲DATE對象。

+0

正是我在找的東西。謝謝。 –

0

您應該按照提交人的順序。 無論日期的格式如何,它仍然是相同的日期和時間DATE_FORMAT返回一個格式化日期而不是列。

+0

- 'filedate'是派生字段。 –

+0

你可以按派生字段排序。雖然如果我注意到我會完成DevlshOne所做的。 – Legion

+0

你錯過了這一點。 'fielddate'不是您所假設的日期列,因此'DATE_FORMAT()'什麼也不做。 –