MySQL:搜索术语应考虑 float 的点和逗号

标签 mysql sql

我想改进我的 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 并获得保存的 float 的结果(totalsum >).

日期字段保存为DATETIME。如果能在搜索中使用其他日期格式(如 22.09.1980)获得结果并获得 1980-09-22 00:00:00 的点击,那就太好了。

最佳答案

您可以使用逗号替换功能:

'a.totalsum LIKE REPLACE(' . $search . ", ',', '.')"

但是对于日期来说,任务更加复杂,因为您需要识别模式。有一个library MySQL支持正则表达式替换。但我建议你使用 PHP:

//replace dd.mm.yyyy -> yyyy-mm-dd
$search = preg_replace('/^(\d{2})\.(\d{2})\.(\d{4})$/', '$3-$2-$1', $search);

关于MySQL:搜索术语应考虑 float 的点和逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32346760/

相关文章:

sql - 如何编写 WHERE 子句来查找特定月份的所有记录?

mysql - 结合INSERT和SELECT查询产生唯一的ID

sql - PostgreSQL多pg_trgm相似度评分子查询

mysql - 我在使用 JDBC 连接池吗?

java - 从 SQL 获取 jdbc4.communicationException

外键约束中的mysql循环依赖

java - JPA Unidrectional OneToMany 通过 JoinColumn 返回相同的记录 n 次而不是 n 个不同的记录

mysql - 如何从 mysql 获取 highcharts-convert.js 中的系列和类别数据

sql - SQL Server/Azure 中空值 "not working"的总和

mysql - 更新表中的行时出错