Mysqli将varchar转换为日期

时间:2016-03-01 15:03:47

标签: mysql

我需要按照签收日期过滤已注册的电子邮件,但问题是制作数据库的人使签收列成为varchar(255)而不是日期戳或类似的东西。 通常我会做这样的事情:

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

有没有办法在不改变数据类型的情况下解决这个问题,因为数据库中已有很多数据。

4 个答案:

答案 0 :(得分: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列中的日期格式。

答案 1 :(得分:0)

年有一个功能:

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

答案 2 :(得分:0)

你需要转换它。您可以像这样使用STR_TO_DATE函数:

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

答案 3 :(得分:0)

就性能而言,将比较转换为字符串

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

但我会建议,如果可能的话,只修复专栏。

您必须执行以下步骤

  1. 创建新列signoffdate
  2. 使用STR_TO_DATE函数
  3. 填充值
  4. 删除旧列
  5. 将signoffdate重命名为signoff