使用 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/