【问题标题】:How to format date in Query Statement Mysql?如何在查询语句 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";

谁能帮帮我?

【问题讨论】:

标签: php mysql


【解决方案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";
    

    【讨论】:

    • 我确保两个项目的格式相同,然后进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2015-03-05
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多