【问题标题】:Postgres conversion from Oracle SQL从 Oracle SQL 转换 Postgres
【发布时间】:2021-01-04 18:44:30
【问题描述】:

最近我们公司开始使用 Postgres。

我有以下代码:

instr(upper(mname), dd.drug) > 0
 and regexp_like(upper(mname),
                           '(^|[^A-Z]+)' || dd.drug || '([^A-Z]+|$)')

如何将其转换为 Postgres?

【问题讨论】:

    标签: postgresql regexp-like


    【解决方案1】:

    我不完全确定 Oracle 表达式的作用,但我认为以下在 Postgres 中应该做同样的事情:

    strpos(upper(mname), dd.drug) > 0
      and upper(mname) ~ '(^|[^A-Z]+)' || dd.drug || '([^A-Z]+|$)'
    

    ~ 是 Postgres 的 regex operator。如果你想要一个in区分大小写的匹配,你也可以使用~*

    第一次检查(使用instrstrpos)对我来说似乎没有必要。我认为您可以将其完全删除。

    【讨论】:

    • 我用这个:upper(mname) ~ '(^|[^A-Z]+)' || '计算机' || '([^A-Z]+|$)' 它给了我一个错误:SQL 错误 [42804]: 错误:WHERE 的参数必须是布尔类型,而不是文本类型位置:121 我正在尝试查找与特定单词完全匹配的术语.例如:我想找到确切的单词“compu”......我不希望任何角色在它之前或之后。所以“decompu”或“computer”不应该出现在我的结果集中。
    【解决方案2】:

    其中上(mname)~'\ycompu\y';

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2011-01-17
      • 2010-11-28
      • 1970-01-01
      • 2011-04-03
      • 2012-08-01
      • 1970-01-01
      • 2019-03-08
      • 2021-11-15
      相关资源
      最近更新 更多