我有一个名称如下的数据库:
Maria Garcia Garralon
Jose Maria Perez Gutierrez
我还有一个过滤器来搜索名称。想象一下,用户在过滤器中写入
玛丽亚加拉龙
(第一个和最后一个字)
在这种情况下,是否有任何SQL子句可以找到记录“Maria Garcia Garralon”?
此致
哈维
答案 0 :(得分:2)
您可以拆分搜索字词并执行multiplie LIKE子句。如:
WHERE
Field LIKE '%maria%'
AND
Field LIKE '%garralon%'
或者,如果您可以确定搜索词的顺序和它们之间的空格,那么您可以随时执行此类操作。
WHERE
Field LIKE REPLACE('maria garralon', ' ', '%')
答案 1 :(得分:1)
是的,你可以使用一个可怕的不可扩展的查询段:
where upper(name) like 'MARIA % GARRALON'
或者你可以采用正确的方式: - )
引入另一个列first_and_last_name
,并使用插入/更新触发器使用正确的值maria garralon
填充它。然后索引该列和您的查询将是非常快的:
where first_and_last_name = 'maria garralon'
这会将计算成本转移到它所属的插入/更新位置,而不是不必要地产生成本的选择。数据仅在插入/更新时更改,因此您只需要 时间就可以产生该费用。
如果您的需求比简单的名字和姓氏更复杂,您可以在触发器中填充其他表格。
答案 2 :(得分:0)
我猜你需要比较两次:
(伪语法) 名称LIKE'%Maria%' 并命名为'%Garralon%'
答案 3 :(得分:0)
会是这样的:
select * from <TABLE>
where <FIELD> like '%'+REPLACE(<NAME>,' ',' % ')+'%'