如何在查询语句 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语句查询两个时间段内工作日的数据(除去周六日)

在MySQL数据库里面,怎么使用SQL语句查询功能把时间戳格式格式化为日期格式如:2013-02-28 6:00:00 ?

正确格式化的 MySQL 日期插入语句返回全 0

如何在 SQL Server中 将日期格式化

如何在 SQL Server中 将日期格式化