我以不同的格式将日期存储在db表中,例如29-06-1991、1991年6月29日,1991年6月29日。我需要一个搜索查询才能获得所有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);
答案 0 :(得分: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();
答案 1 :(得分: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))
我推荐第一个。我还应该指出,可以使用其他替代技术来完成此操作,但是正如我在上一个问题中提到的那样,应始终将日期值存储在date-type列中,以便于处理。
STR_TO_DATE()
是一个有用的函数,但是不适合您的任务,因为它要求您指定传入日期格式,以便它可以正确读取字符串。不幸的是,您的日期字符串的格式不同。