【问题标题】:Sybase like clause for matching a pattern between the string用于匹配字符串之间的模式的 Sybase like 子句
【发布时间】:2020-12-09 15:29:28
【问题描述】:

我想构建一个 sybase ASE 查询来匹配一个人的姓、名。名称有几种不同的格式。它可以是“姓氏,名字”,也可以是“姓氏,名字”(和名字之间没有空格)。我曾尝试使用像 'lastname[,][ ]firstname' 这样的名称,但它不起作用。我不能使用 lastname,%firstname ,因为它会与名字的任何字符匹配。有效字符要么是空格要么什么都没有。有什么建议吗?

【问题讨论】:

    标签: sybase sap-ase


    【解决方案1】:

    很遗憾,SAP/Sybase ASE 不提供对正则表达式模式的支持(例如,“零个或多个空格”),因此您只剩下几个基本选项...

    union (all)两个查询:

    select  *
    from    names_table
    where   name like 'lastname, firstname'
    
    union all
    
    select  *
    from    names_table
    where   name like 'lastname,firstname'
    

    注意:两个查询都应该使用name 列上的索引,假设统计数据显示索引访问计划是最佳选择。

    or 两个where 子句:

    select  *
    from    names_table
    where   (name like 'lastname, firstname' or name like 'lastname,firstname')
    

    注意:这是否使用name 列上的索引将取决于索引和列的统计信息和/或实际查询的复杂性。

    去掉空格并匹配剩下的:

    select  *
    from    names_table
    where   str_replace(name,' ',null) like 'lastname,firstname'
    

    注意:在大多数情况下,这将禁用name 列上的索引。


    从索引的角度...

    如果您需要经常运行这种类型的查询,并且该查询的性能不能接受,您可以查看几个额外的索引选项:

    • (物化)计算列 + 所述计算列上的索引
    • 基于函数的索引(ASE 基本上是在后台创建一个“系统”计算列,然后在该列上创建索引)

    【讨论】:

    • 感谢@markp-fuso 提供的各种方法。不幸的是,我们不能选择任何选项。我们正在查看数据库以使名称保持一致,并且当有两个名称时总是有一个空格。感谢您的洞察力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多