我想改进我的SQL搜索。当前查询如下所示:
$query->where('(a.id LIKE ' . $search . ' OR a.invoiceid LIKE ' .
$search . ' OR c.lastname LIKE ' . $search . ' OR c.firstname LIKE ' .
$search . ' OR c.company LIKE ' . $search . ' OR a.creationdate LIKE ' .
$search . ' OR a.duedate LIKE ' . $search . ' OR a.totalsum LIKE ' .
$search . ')');
这已经很有用了: - )
但如果我输入1,23
而不是1.23
并获得保存的浮点数(totalsum
)的结果会更好。
日期字段保存为DATETIME
。如果在22.09.1980
等搜索中使用其他日期格式获得结果并获得1980-09-22 00:00:00
的点击量,那就太棒了。
答案 0 :(得分:1)
您可以使用替换功能作为逗号:
'a.totalsum LIKE REPLACE(' . $search . ", ',', '.')"
但是对于日期来说任务更复杂,因为您需要识别模式。 MySQL有一个library来支持正则表达式替换。但我建议你使用PHP:
//replace dd.mm.yyyy -> yyyy-mm-dd
$search = preg_replace('/^(\d{2})\.(\d{2})\.(\d{4})$/', '$3-$2-$1', $search);