【问题标题】:MySQL select all where date (stored in varchar type)MySQL select all where date(以varchar类型存储)
【发布时间】:2015-09-11 12:31:12
【问题描述】:

我最初设计数据库时犯了一个错误,我有一个带有 ID、DATE、TIME 的“约会”表,但 DATE 字段的类型是 VARCHAR,我正在使用以下格式保存:29/08/2015

现在我想运行一个查询,选择从今天起 2 天后的所有约会。

我该怎么做?

谢谢

【问题讨论】:

  • 旁注:如果您的项目不太深入,您可以随时更改您的表格。
  • 不幸的是我走得太远了! :(
  • @Andr 这不太可能!
  • 在查询时将查询中的 DATE 字段转换为日期时间。

标签: php mysql date select varchar


【解决方案1】:

您应该修复表中的列定义,同时使用str_to_date函数检索您需要的数据

select * from table_name
where str_to_date(DATE,'%d/%m/%Y') = date_add(now(),interval 2 day)

varchar 日期不是真实日期,会为不同部分创建更多问题,要修复表格列,您可以按照以下步骤操作

第 1 步:

alter table table_name add column new_date date ;

第 2 步:

update table_name set new_date = str_to_date(DATE,'%d/%m/%Y');

第三步:

alter table_name drop column DATE ;
alter table_name change new_date DATE date

【讨论】:

  • “您应该修复表格中的列定义” - 确实。但是,OP 回复了我对他们的评论,显然在他们的项目中太过分了。不过这看起来很有希望。
  • 是的,我现在不能更改字段类型.. 我们有很多数据,我们会弄乱系统
  • 是的,这是一个建议,您可能会也可能不会遵循,但让生活变得简单就是标准。
【解决方案2】:

使用date();

$twoDaysFromNow = date('d/m/y', time() + 172800); // Adds exactly two days (172,800 seconds) to the current day, and returns it in given format.

$sql = "SELECT FROM `appointments` WHERE `date` = '{$twoDaysFromNow}'"; // Execute query with new date.

【讨论】:

  • 您在{$twoDaysFromNow}' 之后有一个错位的勾号,属于/在appointments 之后
  • 啊,我们走了,不客气。让我们看看 OP 现在怎么说 ;-)
  • 我觉得添加它们是个好习惯。然而,似乎引起的头痛比它[没有]解决的要多。 ;)
  • 我怎样才能修改它成为一个日期之间?我的意思是在 TODAY 和 "$twoDaysFromNow" 之间?
  • @Andr “我怎样才能将它修改为日期之间?” - 这完全是一个“另一个”问题。您应该标记可能已经解决了您的原始问题的答案之一,而不是“事后”添加。
猜你喜欢
  • 2014-10-31
  • 2010-10-11
  • 2013-05-27
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多