[英]SQL - Time since date
我為一件事而苦苦掙扎。 我試圖通過使用SQL計算某個日期是多少天前。 我在數據庫中擁有的日期可以采用兩種格式:
Aug 28 2014, 17:17:34 CEST
Dec 29 2015, 01:03:14 CET
那是兩個不同日期的例子。 注意“ CET”和“ CEST”。
但是無論如何,我將如何在SQL查詢中進行計算呢? 我設法在PHP中做到這一點,但我想在SQL查詢本身中做到這一點(如果可能的話)。 因為這樣可以節省大量的內存使用量。 我嘗試使我的工作盡可能快。 我只想訪問過去2-3天左右才登錄的用戶的數據。 當然,我可以對SELECT * FROM users
進行SELECT * FROM users
,然后運行PHP來檢查日期。 但是,也許有一種方法可以在SQL中做到這一點? 贊: SELECT * FROM users WHERE [lastlogin < 2 days]
這是我當前的PHP代碼。 我真的很想用SQL做到這一點。 順便說一句,我的專欄目前是文字。 由於某種原因,日期時間無法使用該格式。
$lastlogin = $row['lastlogin'];
$lastlogin = str_replace("\xc2\xa0",' ',$lastlogin);
$Date = $lastlogin;
$Date = substr($Date, 0, strpos($Date, " CE"));
$now = date('Y-m-d');
$datetime1 = new DateTime($Date);
$datetime2 = new DateTime($now);
$interval = $datetime1->diff($datetime2);
$difference = $interval->format('%a days ago');
echo "Last login was: " . $difference;
您應該更改表以清理數據。 將數據轉換為兩列,其中一列為時區信息,另一列為日期和時間。 您可以使用SUBSTRING_INDEX()輕松拆分數據,並將字符串同時轉換為日期時間。
像這樣在“ CET”和“ CEST”的“ C”上進行拆分:
SELECT SUBSTRING_INDEX("Aug 28 2014, 17:17:34 CEST","C",1)
並且您會看到只剩下日期和時間部分,盡管仍然是字符串格式。 可以使用STR_TO_DATE進行更改,並且您可以同時進行兩種操作。
首先添加新列以存儲數據:
ALTER yourtablename ADD newdatecolumn DATETIME AFTER oldcolumnname;
ALTER yourtablename ADD newtimezonecolumn VARCHAR(4) AFTER newdatecolumn;
UPDATE yourtablename
SET newdatecolumn =
STR_TO_DATE(SUBSTRING_INDEX(olddatecolumn,"C",1), '%b %d %Y, %T')
然后,您可以再次使用SUBSTRING_INEX,這次在列的最后一個空格上進行划分,並為另一個新列獲取時區
UPDATE yourtablename
SET newtimezonecolumn = SUBSTRING_INDEX(olddatecolumn," ",-1)
那么您將擁有可以輕松使用建議DATEDIFF()或其他時間和日期函數的數據。 如果需要,可以刪除舊的日期列。
請注意,應將yourtablename等更改為實際的表名和列名。
您可以使用to_days()或datediff()函數
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.