我想從數據庫中僅返回添加「今年」(當前年份)的行。每行的創建日期作爲時間戳存儲在十進制格式中。比較當前的時間戳與mysql存儲的時間戳
我想象的一種方法是獲取當前年份的時間戳範圍,然後選擇適合此範圍的行。我有谷歌它,但沒有成功。 有沒有辦法將給定年份與該數據庫存儲的時間戳進行比較?
我想從數據庫中僅返回添加「今年」(當前年份)的行。每行的創建日期作爲時間戳存儲在十進制格式中。比較當前的時間戳與mysql存儲的時間戳
我想象的一種方法是獲取當前年份的時間戳範圍,然後選擇適合此範圍的行。我有谷歌它,但沒有成功。 有沒有辦法將給定年份與該數據庫存儲的時間戳進行比較?
通常的模式是你描述...裸列比較的範圍。
我們可以使用表達式來導出範圍的開始和結束。在這種情況下,年初和明年年初。
編輯
如果creation_date
列的數據類型爲DATE,DATETIME,或TIMESTAMP格式,那麼,作爲一個例子:
WHERE t.creation_date >= DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 0 MONTH
AND t.creation_date < DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH
我們可以測試使用SELECT語句表達
SELECT DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 0 MONTH AS d1
, DATE_FORMAT(NOW(),'%Y-01-01') + INTERVAL 12 MONTH AS d2
ret甕
d1 d2
---------- ----------
2016-01-01 2017-01-01
否則對「裸」列中的比較是,將允許MySQL來在合適的索引使用一系列掃描操作,如果有一個可用的圖案。
如果我們要將列包裝在一個函數中,這將強制MySQL爲表中的每一行計算函數。所以我不推薦這種模式。但作爲一個例子:
WHERE YEAR(t.creation_date) = YEAR(NOW())
EDIT
編輯的問題說created_date
列被存儲爲小數數據類型。
只要存儲的值是規範(也就是說,以後的值總是比較任何日期較早的價值「大於」)...
那麼同樣的模式應用...將裸露列與範圍的開始和結束進行比較。
WHERE t.decimal_col >= beginning_of_this_year
AND t.decimal_col < beginning_of_next_year
只需要提供(即返回十進制值或表達式)代表beginning_of_this_year和beginning_of_next_year十進制值。
如果沒有關於存儲值的更精確的定義以及這些值的值代表什麼日期,我不能給出更具體的示例。
它超出了我的預期。我真的很感激。 – user348078
您可以使用STR_TO_DATE功能
STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r')
和過濾
where year(STR_TO_DATE('31/12/2016 8:06:26 AM', '%d/%m/%Y %r')) = 2016
更新您的問題並顯示您的樣本數據和您的表架構 – scaisEdge
什麼是創建日期數據格式?字符串或時間戳? – reza
它只是一個存儲爲十進制類型的時間戳 - 十進制(50,0) – user348078