【问题标题】:Search and get Records from Multiple Formate Date in php在 php 中从多种格式日期中搜索并获取记录
【发布时间】:2018-09-03 06:18:42
【问题描述】:

我在我的数据库表中存储了不同格式的日期,例如 29-06-1991、29.06.1991、29/06/1991。我需要一个搜索查询来获取所有 1991 年 6 月 29 日的日期记录。

$query = JFactory::getDbo()->getQuery(true);
$query->select('*');        
$query->from('#__orders');
$query->where('STR_TO_DATE(orderdateis,'%d-%m/%Y') ='.$db->Quote($rentaldate));
$db->setQuery($query);

【问题讨论】:

  • 当前代码有什么问题?
  • @aMoLThite 我通过日期选择器传递 29.06.1991 日期。没有记录结果
  • @Karthik 解决了您的问题吗?您在实施时遇到任何问题吗?

标签: php date mysqli joomla sql-like


【解决方案1】:

我认为引号的问题尝试更改以下内容

$query->where('STR_TO_DATE(orderdateis,'%d-%m/%Y') ='.$db->Quote($rentaldate));

$query->where("STR_TO_DATE(orderdateis,'%d-%m/%Y') =".$db->Quote($rentaldate));

尝试在 MySQL 控制台上执行查询

您可以使用以下 API 来获取查询的转储

echo $query->dump();退出();

【讨论】:

  • 生成的查询是否给了你正确的答案?
【解决方案2】:

由于只有您的分隔符会发生变化(而不是数字值的顺序),您可以非常有效地使用 LIKE 和下划线来标​​记任何字符的限定位置。

实际上,您准备好 php 变量以适应查询。 (Demo)

$rentaldate = '29.06.1991';
$query->where("orderdateis LIKE " . $db->q(str_replace('.', '_', $rentaldate));

或者你可以保持你的变量不变并使用更昂贵的REGEXP调用来利用.的“魔法”,它代表“任何字符”:(Demo)

$rentaldate = '29.06.1991';
$query->where("orderdateis REGEXP " . $db->q($rentaldate))

我推荐第一个。我还应该指出,这可以通过更多替代技术来完成,但正如我在您之前的问题中提到的,您应该始终将日期值存储在日期类型列中以便于处理。

STR_TO_DATE() 是一个有用的函数,但不适合您的任务,因为它需要您指定传入的日期格式,以便它可以正确读取字符串。不幸的是,您的日期字符串格式不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多