2016-03-01 63 views
-1

我需要通過簽名日期過濾註冊的電子郵件,但問題是讓數據庫製作簽名列的人是varchar(255)而不是日期戳或類似的東西。 通常我會做這樣的事情:Mysqli convert varchar date

SELECT * FROM email WHERE signoff >= DATE_SUB(NOW(), INTERVAL 1 DAY 

有什麼辦法來解決這個問題不改變的數據類型,因爲已經有很多數據庫中的數據。

+1

修復色譜柱需要15分鐘。永遠編寫替代方案是無法衡量的。 –

回答

0

在性能方面它也許是更好的對比轉換爲字符串

$result = $dbhandle->query("SELECT * FROM email WHERE signoff >= CAST(DATE_SUB(NOW(), INTERVAL 1 DAY) AS CHAR(255)); 

但我會建議,給剛修好列,:您可以使用STR_TO_DATE功能是這樣的。

你必須執行以下步驟

  1. 創建新列signoffdate
  2. 與該STR_TO_DATE函數的值填充它
  3. 刪除舊列
  4. 的signoffdate重命名爲註銷
0

呀,這是很容易的:

$result = $dbhandle->query("SELECT * FROM email WHERE str_to_date(signoff, '%Y-%m-%d %H:%i:%s') >= DATE_SUB(NOW(), INTERVAL 1 DAY"); 

更改日期格式STR_TO_DATE以匹配VARCHAR列的日期格式。

0

年有一個函數:

STR_TO_DATE('2011-12-21 02:20pm', '%Y-%m-%d %h:%i%p') 
0

你需要將其轉換。如果多數民衆贊成可能

$result = $dbhandle->query("SELECT * FROM email WHERE STR_TO_DATE(signoff , '%m/%d/%Y') >= DATE_SUB(NOW(), INTERVAL 1 DAY"); 
相關問題