【问题标题】:Query to check if we have any row which start with input String查询以检查我们是否有任何以输入字符串开头的行
【发布时间】:2019-11-25 10:09:53
【问题描述】:

让我们说有值的列

“Html”、“Java”、“JQuery”、“Sqlite”

如果用户输入

“Java 是我最喜欢的编程语言”

那么结果应该是

选择了值为“Java”的 1 行

因为输入的句子以“Java”开头

但是如果用户输入了

“我的应用程序数据库在 Sqlite 中”

那么查询应该返回空。

已选择 0 行

因为输入的句子不是以“Sqlite”开头的。

我正在尝试以下查询:

SELECT * FROM demo where 'Java' like demo.name; // work

但如果输入长文本则失败

SELECT * FROM demo where 'Java is my favorite programming language' like demo.name; // Fails

【问题讨论】:

    标签: sql string sqlite where-clause sql-like


    【解决方案1】:

    我想你想要这样的东西:

    SELECT * FROM demo WHERE yourText LIKE demo.name || '%' ;
    

    【讨论】:

    • 您应该将+ 替换为|| 以连接字符串。
    • @Eritrean 谢谢我认为 + 将连接字符串
    【解决方案2】:

    只需将列名放在like 运算符的左侧,并在字符串键的右侧连接一个通配符:

    select * from demo where name like 'Java%' ; -- or like 'Sqlite%' etc
    

    你可以让它更通用,比如:

    select * from demo where name like ? || %' ;
    

    其中? 是一个绑定参数,表示用户提供的值(您也可以在传递参数之前与应用程序中的通配符连接)。

    【讨论】:

    • 我无法控制用户要输入的内容。我怎么知道用户是否输入了Java
    【解决方案3】:

    使用通配符连接您的列:

    SELECT * FROM demo where 'Java is my favorite programming language' like demo.name || '%';
    

    【讨论】:

      【解决方案4】:

      您可以像这样进行查询

      Select * from SearchPojo where name GLOB '*' || :namestring|| '*'"
      

      【讨论】:

        【解决方案5】:

        不确定我是否遇到了问题,但是...

        您可以查询这些值(Html、Java、JQuery、Sqlite)将它们放在一个集合中,例如 List,然后获取用户的输入并检查它:

        List<String> values ... // Html, Java, JQuery, Sqlite
        
        for (String value : values) {
           if (userInput.contains(value) {
              // print
              System.out.println("1 row selected with value \"Java\");
           }
        }
        

        它支持用户输入多个选项的情况。

        【讨论】:

          猜你喜欢
          • 2018-08-12
          • 2012-02-06
          • 2023-01-01
          • 2019-08-24
          • 2015-04-15
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          相关资源
          最近更新 更多