如何在查询语句 Mysql 中格式化日期?
Posted
技术标签:
【中文标题】如何在查询语句 Mysql 中格式化日期?【英文标题】:How to format date in Query Statement Mysql? 【发布时间】:2014-12-16 17:55:12 【问题描述】:我在 mysql 中使用 php,当用户在 date_field 中选择月份和年份时,我需要运行特定的查询。 此查询返回由用户选择的月/年创建的所有记录,我不希望在 select 内的子句中关联天数。 由于我只需要月/年选择的记录,有什么方法可以在仅选择的月/年中定义吗?
这是我的 Mysql 语句,其中包含用户选择的变量 有两个与内部联接相关的表,因此我可以使用日期“抓取”记录:
$quer_mesano = "Select b.name AS Canal
from canal_canalvenda b
inner join meta_meta c On c.canal_canalvenda_id_c = b.id
And c.deleted = 0
where c.periodo = '$month_year' //Here is the date value I just need to put in month/year
And b.deleted = 0
Group by Canal order by 1";
谁能帮帮我?
【问题讨论】:
在您的架构中,列 c.periodo 是如何定义的? $month_year 是什么格式,能举个例子吗? dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html,尤其是date_format()
。
【参考方案1】:
这很容易。使用 DATE_FORMAT。只需像这样更改 Sql 语句:
$quer_mesano = "Select b.name AS Canal
from canal_canalvenda b
inner join meta_meta c On c.canal_canalvenda_id_c = b.id
And c.deleted = 0
where DATE_FORMAT( c.periodo, '%Y-%m' ) = '$month_year' //Just put DATE_FORMAT
And b.deleted = 0
Group by Canal order by 1";
【讨论】:
这不会使用您碰巧在meta_meta.periodo
上定义的任何索引。如果您的性能取决于此,您可能需要使用范围查询。【参考方案2】:
DATE_FORMAT() 可以如下所示使用
$quer_mesano = "Select b.name AS Canal
from canal_canalvenda b
inner join meta_meta c On c.canal_canalvenda_id_c = b.id
And c.deleted = 0
where DATE_FORMAT( c.periodo, '%Y/%m' ) = '$month_year'
And b.deleted = 0
Group by Canal order by 1";
对于月份,您有不同的类型 - %M 月份名称 %m 月份,数字 (00-12) 和一年 - %Y 年份,四位数 %y 年份,两位数
【讨论】:
【参考方案3】:我将月份年份转换为 YYYY-MM 格式,以便与数据库进行比较。
$quer_mesano = "Select b.name AS Canal
from canal_canalvenda b
inner join meta_meta c On c.canal_canalvenda_id_c = b.id
And c.deleted = 0
where DATE_FORMAT( c.periodo, '%Y-%m' ) = '" . date("Y-m", strtotime($month_year)) . "' //Here is the date value I just need to put in month/year
And b.deleted = 0
Group by Canal order by 1";
【讨论】:
我确保两个项目的格式相同,然后进行比较。以上是关于如何在查询语句 Mysql 中格式化日期?的主要内容,如果未能解决你的问题,请参考以下文章
求教如何利用MySQL语句查询两个时间段内工作日的数据(除去周六日)
在MySQL数据库里面,怎么使用SQL语句查询功能把时间戳格式格式化为日期格式如:2013-02-28 6:00:00 ?