2016-03-01 60 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"); 
相关问题