php - 基于文本字段将字段显示为 yyyy/mm/dd

标签 php mysql sorting

使用 PHP 和 MySQL,我有一个事件表,该表按名为 sort_date 的字段排序,格式为 yyyy/mm/dd。

我需要在页面上显示 start_date:dd 月(例如 11 月 7 日)。

所以我最初将 start_date 和 end_date 字段设置为日期选择器。但是,一旦输入记录,我就必须手动更改日期格式:月 dd。但这并没有按升序对日期进行排序,因此我有一个 Sort_date 字段...并且采用 yyyy/mm/dd 格式。

我希望在我的页面上列出这样的事件:

8月27日 时间 在哪里 地址 说明

这是有效的,但现在我将开始日期和结束日期更改为文本,sort_date 字段无法读取信息。

所以我的问题是,如何让 sort_date 字段读取 TEXT start_date 字段中的内容并将其显示为 yyyy/mm/dd?

这是我的sql语句:

SELECT * 
  FROM events
 WHERE DATE_FORMAT(sort_date, '%Y-%m-%d') >= Date_Format(Now(), '%Y-%m-%d')
   AND authorize = 1 
 ORDER BY sort_date

我该如何解决这个问题?

最佳答案

这需要两个步骤。

首先,您需要将文本列日期转换为 DATE 表达式。

例如,您可以使用以下方法来做到这一点

 STR_TO_DATE('2014/11/18', '%Y/%m/%d')

然后,您可以操作该 DATE 表达式,对其进行排序、格式化或执行任何您需要执行的操作。要从上述表达式中获取 November 2014,您需要执行以下操作:

DATE_FORMAT(STR_TO_DATE('2014/11/18', '%Y/%m/%d'), '%M %Y')

要从该表达式中获取包含 11 月 1 日(该月的第一天)的 DATE 值,您可以执行以下操作。

DATE(DATE_FORMAT(STR_TO_DATE('2014/11/18', '%Y/%m/%d'), '%Y-%m-01'))

重点是您应该将基于字符串的日期转换为 DATE 表达式,因为这样可以使用各种有用的日期算术运算。

要处理问题中的 WHERE 子句,请执行以下操作:

WHERE STR_TO_DATE(sort_date, '%Y/%m/%d') >= NOW()

要处理 ORDER BY 子句,您可以执行以下操作:

ORDER BY STR_TO_DATE(sort_date, '%Y/%m/%d')

这里有一个危险。如果某些日期字符串格式错误,MySQL 日期转换将默默返回 NULL。因此,我将使用以下 ORDER BY 子句,然后仔细查看输出,至少一次

ORDER BY STR_TO_DATE(sort_date, '%Y/%m/%d') NULLS FIRST

关于php - 基于文本字段将字段显示为 yyyy/mm/dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25515838/

相关文章:

在成员变量中使用命名空间的 PHP 静态方法调用

php - SQL查询根据某列值获取所有记录

当包装在 perl DBI 中时,MySQL 查询似乎给出了不同的结果

mysql - 如何查找下一行或上一行或下一行

javascript - 从数组生成 strip 索引 block

php - Wordpress - 抱歉,您无权编辑此项目

php - 来自不同域的mysql连接

php - Laravel Backpack 进入新的时间领域 从 1970 年开始日历

sorting - Swift 2 排序 - 无法使用类型的参数列表调用 'sort'...

arrays - 在 ruby​​ 中使用宇宙飞船运算符进行自定义排序