在php中搜索并从多个格式日期获取记录

问题描述 投票:0回答:2

我在我的数据库表中以不同的格式存储日期,如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);
php joomla joomla3.0 joomla-extensions
2个回答
0
投票

我认为引号的问题尝试改变下面的内容

$ 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(); jexit();


0
投票

由于只有您的分隔符发生变化(不是数字值的顺序),因此您可以非常有效地使用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()是一个有用的函数,但不适合您的任务,因为它要求您指定传入的日期格式,以便它可以正确读取字符串。不幸的是,您的日期字符串格式不同。

© www.soinside.com 2019 - 2024. All rights reserved.