日期过滤器的PHP查询[关闭]

Posted

技术标签:

【中文标题】日期过滤器的PHP查询[关闭]【英文标题】:PHP query for date filter [closed] 【发布时间】:2021-05-14 09:37:04 【问题描述】:

当字段类型存储为varchar且格式为dd/mm/yyyy时,如何过滤表的数据?

我附上截图。

它只根据日期过滤,它不会检查月份和年份。 如果 SQL 解决方案不可用,请告诉我如何在 php 中处理此问题。

【问题讨论】:

将存储的数据(和标准,如果需要)转换为 DATE 数据类型,然后过滤。但最好的方法是更改​​列并为其设置 DATE 数据类型。 正确的解决方案是将该列转换为实际的日期列并转换数据,然后您可以直接过滤。否则,请参阅this relevant thread。 .. 或至少将存储格式从 dd/mm/yyyy 更改为 yyyy/mm/dd - 这允许以字符串格式正确比较日期。 【参考方案1】:

更好的方法是通过STR_TO_DATE 将列更新为日期,以便在更改时不丢失数据,然后更改列并将 DATE 设置为它的数据类型。

UPDATE `details` SET `datenew` = STR_TO_DATE(`datenew`, "%d/%m/%Y");
ALTER TABLE `details` MODIFY `datenew` DATE

然后您可以轻松运行查询

SELECT * FROM `details` WHERE `datenew` >= str_to_date('23/06/2020', '%d/%m/%Y')

【讨论】:

它可以工作,但没有任何单独的查询可以根据该格式过滤此数据库 如果它有效并回答问题,请接受它。是的,您已经通过根据该格式更新并将其更改为正确的数据类型 DATE 来过滤它。【参考方案2】:

将列转换为日期!您可以在 where 子句中执行此操作:

where str_to_date(datecol, '%d/%m/%Y') >= ? and
      str_to_date(datecol, '%d/%m/%Y') < ?

但是,正确的做法是使用正确的类型存储数据:

update t
    set datecol = date_format(str_to_date(datecol, '%d/%m/%Y'), '%Y-%m-%d');

alter table t modify column datecol date;

  

【讨论】:

【参考方案3】:

您可以在 WHERE 子句中 str_to_date varchar 数据类型的日期

SELECT * FROM details WHERE str_to_date(datenew, '%d/%m/%Y') >= '20200603'

【讨论】:

这个不行 抱歉我是用 MSSQL 写的,我已经更新到 mysql

以上是关于日期过滤器的PHP查询[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP/SQL - 如何过滤掉与另一个表的数据有冲突的记录?

查询根据发布日期过滤订单?

sql查询中的日期过滤器以获取今天的值

将AJAX响应格式转换为HTML [关闭]

基于查询字符串的Django模型过滤器[关闭]

Abap日期字段比较和查询最年轻的字段[关闭]