【问题标题】:SQL query with two like clauses带有两个类似子句的 SQL 查询
【发布时间】:2016-07-06 14:42:31
【问题描述】:

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

我已经建立了一个数据库,并且我正在使用一个用户界面,因此用户可以获得某些数据位。用户需要能够同时按名字和姓氏进行搜索,以返回被搜索人的所有信息。这是我在下面使用的代码。当我运行程序并输入“joe bloggs”时,我弹出一个异常,说“抱歉没有找到匹配项”。我确信 joe bloggs 在数据库中,所以那里没有问题。

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

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

【问题讨论】:

  • 添加一些示例表数据和预期的结果!
  • 您使用的是 MySQL 还是 Oracle?
  • 你可以阅读一些关于 LIKE (Oracle) 的文档
  • 只有部分名称匹配会发生什么
  • 请添加更多详细信息

标签: java mysql sql oracle


【解决方案1】:

我假设用户输入的名称只是一个变量(在您的问题中由? 提及),您希望将其与数据库中的名称联系起来。

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

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

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

正如其他人所提到的,您可能可以将LIKE 替换为=。名称之类的东西,通常需要完全匹配。

【讨论】:

    【解决方案2】:

    如果你把joe bloggs放在两个like中,当然不行,因为'joe'不像'joe bloggs'。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      相关资源
      最近更新 更多