关于SQL子句的问题

时间:2010-06-01 09:55:47

标签: sql

我有一个名称如下的数据库:

Maria Garcia Garralon 
Jose Maria Perez Gutierrez

我还有一个过滤器来搜索名称。想象一下,用户在过滤器中写入

  玛丽亚加拉龙

(第一个和最后一个字)

在这种情况下,是否有任何SQL子句可以找到记录“Maria Garcia Garralon”?

此致

哈维

4 个答案:

答案 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>,' ',' % ')+'%'