【问题标题】:A query with a reverse LIKE condition具有反向 LIKE 条件的查询
【发布时间】:2017-08-30 13:53:25
【问题描述】:

有一个列名为“phone”的表格,有不同格式的不同号码。

例子:

id | number
1  | 03439879098
2  | 01109890032
3  | +91 932 3233237

现在如果我想搜索“3233237”,那么查询将是:

select * from table where number like '%3233237%';

结果将是:

id | number
3  | +91 932 3233237

但在我的情况下,我想要相反

String search = "+92 343 9879098"

select * from table where number like search

结果应该是:

id | number
1  | 03439879098

因为列number和搜索字符串有一个共同的字符串,即9879098

查询的设计方式应使其查找搜索字符串和列值具有公共子字符串的记录

请给我一些想法。

【问题讨论】:

  • 空格呢?数字的哪些部分应该匹配,哪些可以不同?您要求找到有点相似的值,但定义不明确。
  • 只需从搜索中删除“+92”String
  • 什么是“名字”?
  • 数字“98790985”呢,它包含字符串的一部分。它应该匹配吗?还是只是最后一个数字?请编辑您的问题。

标签: sql sqlite android-sqlite


【解决方案1】:

这是一个棘手的问题。您可以在纯 SQL 执行中做到这一点:

select * from table where '+92 343 9879098' like '%' || number || '%';

这里我们将 number 列与通配符 % 连接起来。

*您也可以通过编程方式解决它:

    String search = "+92 343 9879098";
    String query = "select * from table where ";
    String[] parts = search.split( "\\s+" );
    for ( String oneNumber : parts ) {
        query += " number like '%" +oneNumber+ "%' OR";
    }
    query += " false"; // this, or trim the last OR calculating the string length

干杯。

【讨论】:

    【解决方案2】:

    你有没有试过NOT LIKE 所以它会是这样的

    select * from table where name not like search

    【讨论】:

    • 虽然他的标题要求反向功能,但他的问题中的细节却没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多