【问题标题】:Exact result in Google Query, followed by partial match if exact result does not existGoogle Query 中的确切结果,如果不存在确切结果,则后跟部分匹配
【发布时间】:2017-06-26 03:33:03
【问题描述】:

我正在使用 Google Query 搜索 Google 电子表格:https://jsfiddle.net/BaronGrivet/ctkpvuac/3/

示例数据:

Block Hill Road
Greenhill Road
Hill Road
Brownhill Road

示例查询:

'SELECT A WHERE LOWER(A) LIKE "%'+searchInput+'%" ORDER BY A ASC'

如果有人搜索“Hill”,它将返回所有行。

但是,如果有人搜索“Hill Road”,它仍会返回最后列出“Hill Road”的所有行。

理想情况下,我希望它要么只返回完全匹配的“Hill Road”,要么至少将“Hill Road”作为第一个响应。

有没有办法构造查询,以便仅显示或首先显示完全匹配?

或者我是否必须编写一个回退脚本,首先查询完全匹配,如果没有返回,我查询部分匹配?

【问题讨论】:

    标签: google-sheets google-query-language


    【解决方案1】:

    也许是朝着正确方向迈出的一步:

    ={query(A:A,"select * where LOWER(A) LIKE 'hill road%' ORDER BY A desc");query(A:A,"select * where LOWER(A) LIKE '%hill road%' ORDER BY A desc")} 
    

    下订单:

    Hill Road
    Hill Road
    Greenhill Road
    Brownhill Road
    Block Hill Road
    

    (完全匹配是重复的),或者可能在 ColumnA 中的所有条目前面加上一个空格并应用:

    ={query(A:A,"select * where LOWER(A) LIKE '% hill road%' ORDER BY A desc");query(A:A,"select * where LOWER(A) LIKE '%hill road%' ORDER BY A desc")}
    

    给予:

     Hill Road
     Block Hill Road
     Hill Road
     Greenhill Road
     Brownhill Road
     Block Hill Road
    

    如果您不想重复“精确”和“相似”,请使用 UNIQUE:

    (a) 不加空格:

    =unique({query(A:A,"select * where LOWER(A) LIKE '% hill road%' ORDER BY A desc");query(A:A,"select * where LOWER(A) LIKE '%hill road%' ORDER BY A desc")})
    

    输出:

    Hill Road
    Greenhill Road
    Brownhill Road
    Block Hill Road
    

    (b) 加空格:

    =unique({query(A:A,"select * where LOWER(A) LIKE '% hill road%' ORDER BY A desc");query(A:A,"select * where LOWER(A) LIKE '%hill road%' ORDER BY A desc")})
    

    输出:

     Hill Road
     Block Hill Road
     Greenhill Road
     Brownhill Road
    

    如果选择 UNIQUE order asc 可能更有意义。

    【讨论】:

    • 谢谢。你能告诉我用 UNIQUE 包装的语法吗?
    • 不幸的是,我收到“无效查询”响应:jsfiddle.net/BaronGrivet/jronLh38/1 发送此查询=unique({query(A:A, "SELECT A WHERE LOWER(A) LIKE 'hill road%' ORDER BY A ASC LIMIT 10");query(A:A, "SELECT A WHERE LOWER(A) LIKE '%hill road%' ORDER BY A ASC LIMIT 10")}) - 在电子表格中工作正常:docs.google.com/spreadsheets/d/…
    猜你喜欢
    • 2013-12-15
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多