包含两个like子句

时间:2016-07-06 14:42:32

标签: java mysql sql oracle

我是一个完全的初学者,所以如果我以一种难以理解的方式写这篇文章,我会提前道歉。

我已经设置了一个数据库,并且我正在使用用户界面,因此用户可以获取某些数据。用户需要能够通过名字和姓氏进行搜索,以返回被搜索的人的所有信息。这是我在下面使用的代码。当我运行程序并输入' joe bloggs'我弹出的一个例外是“对不起找不到匹配”#39;我确信joe bloggs在数据库中,因此没有问题。

我是否需要考虑用户输入的名字和姓氏之间的空格?

SELECT * FROM TABLE
WHERE UPPER(FirstName) LIKE UPPER(?) AND UPPER(Surname) LIKE (?);

2 个答案:

答案 0 :(得分:0)

如果你把joe bloggs放在两者中,当然它不会起作用,因为'joe'不像'joe bloggs'。

您需要拆分字符串,或者更好,为用户提供2个输入。

如果您只想要完全匹配,请使用=运算符,而不是。 如果要查找包含用户输入的名称,请添加“%”:

WHERE UPPER(FirstName) LIKE UPPER('%'+userInput+'%)

答案 1 :(得分:0)

我假设用户输入的名称只是一个变量(某个形状或形式,在?引用的问题中),您想要绑定到数据库中的名称。

如果这个假设是正确的,你可以这样做:

SELECT * FROM TABLE
WHERE CONCAT(CONCAT(UPPER(FirstName), ' '), UPPER(Surname)) LIKE (?);

这假设用户只在名称中输入了一个空格。拼写错误很容易,因此与给定名称中任何和所有空格的replace进行比较可能会更好。

正如其他人所说,您可以将LIKE替换为=。像名字这样的东西,你通常想要完全匹配。