【问题标题】:STR_TO_DATE mysql & phpSTR_TO_DATE mysql & php
【发布时间】:2013-07-17 00:52:11
【问题描述】:

我有一个名为 dispatchdate 的列,它被存储为 VARCHAR(255)。它以“12/06/2013”​​格式存储日期。 (DD/MM/YYYY)

我知道我应该使用更好的领域,但我还是新手/正在学习 MYSQL 和 PHP。 它仅在本地 PC 上用于测试等......

在我的页面上,我有一个执行基本“从表中选择 *”并列出行的查询。

我想重新定义查询,以便我可以输入日期范围来缩小我的列表。

我目前正在使用...

mysql_connect('localhost','root','');
mysql_select_db('operations');
$result = mysql_query("SELECT * FROM dispatch");

我假设我必须使用 STR_TO_DATE 将其从 varchar 转换为日期格式。 但是 %d/%m/%Y 显示为 '2013-06-12' 而不是 '12-06-2013'。

如何使用SELECT STR_TO_DATE( dispatchdate, '%d/%m/%Y' ) 在 PHP 中构建查询,然后输入要搜索的条件(例如 01/07/13 -> 31/07/13)

【问题讨论】:

  • “我知道我应该使用更好的字段,” - 绝对应该。首先将您的日期/时间值存储在 DATETIME 字段中。
  • 如果您能稍微扩展一下,并解释我如何做到这一点,我们将不胜感激......
  • 创建表时,将DateTime 指定为字段类型,而不是varchar。然后就可以直接在日期上使用MySQL的日期函数了,不用先做转换。
  • 顺便说一句 - 有人会告诉你:PHP 的 mysql 函数已被弃用。你不应该使用它们。请改用mysqliPDO
  • 是的,我知道这一点,我仍在阅读它,以及 sql 注入等。这只是一个本地测试数据库。 -如何将包含大量数据的现有表从 varchar255 转换为 datetime 而不会丢失所有数据并重新开始?

标签: php mysql


【解决方案1】:

显然,您希望以您正在存储的字符格式检索它。所以,不要在select 中进行转换。只需在where 子句中进行转换。例如,要获取上周的行:

SELECT *
FROM dispatch
where STR_TO_DATE( dispatchdate, '%d/%m/%Y' ) >= adddate(now(),  - 7)

【讨论】:

  • 在 PHP 中可以兼容吗?我试过了, $result = mysql_query("select * from dispatch where STR_TO_DATE(dispatchdate, '%d/%m/%Y') >= date(now()) - 7 days");但它给出了一个错误。
  • @bnovation 。 . .问题是查询。使用adddate() 绝对有效。
  • 感谢当我尝试得到警告时:mysql_fetch_array() 期望参数 1 是资源,在第 63 行的 C:\wamp\www\dispatch\dispatch-report.php 中给出的布尔值 第 63 行说: while($row = mysql_fetch_array($result)) { echo "";回声“”。 $row['dispatchdate'] 。 "";
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 2014-10-23
  • 2017-03-16
  • 2017-05-26
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多