代码之家  ›  专栏  ›  技术社区  ›  Tarski

进度数据库SQL的like运算符

  •  2
  • Tarski  · 技术社区  · 16 年前

    我正在尝试执行这样的正在进行的SQL(这不是Postgres!)

    SELECT
        CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
    FROM
        bar
    

    但是,进度不支持like运算符。 INSTR 看起来它可以完成这项工作,但它是一个进度扩展,在我使用的数据库上不支持。是否有其他方法可以使用标准的ODBC函数来实现这一点?

    谢谢

    4 回复  |  直到 13 年前
        1
  •  5
  •   David Webb    16 年前

    没有 LIKE 操作员正在进行4GL。(有一个 关键字,但它用于其他用途。)相反,您需要使用 MATCHES CONTAINS 运算符。我从未使用过SQL接口来进行操作,但它可能是相同的。

    所以你可以尝试:

    SELECT
        CASE WHEN code MATCHES '*foo*' THEN 'Y' ELSE 'N' END as foo
    FROM
        bar
    

    注释- 比赛 使用 * 对于通配符而不是 % .

    或:

    SELECT
        CASE WHEN code CONTAINS 'foo' THEN 'Y' ELSE 'N' END as foo
    FROM
        bar
    
        2
  •  1
  •   Taryn Frank Pearson    13 年前

    刚刚发现这个问题,对于任何可能仍然有问题的人,我建议使用squirrelSQL客户机,它允许您向进度库编写几乎100%的SQL语法。包括在内

        3
  •  0
  •   pedromarce    16 年前

    您可以尝试使用匹配项(相同的语法,而不是相似的),也许这是可行的。

        4
  •  0
  •   Tom Bascom    16 年前

    您使用的是什么版本的进度10.0?10.1?10.2?

    您是在4GL会话中使用嵌入式SQL-89,还是通过ODBC/JDBC连接使用SQL-92?听起来您使用SQL-92是因为您提到了“驱动程序”和instr。

    在任何情况下都没有类似于SQL的。不过,这里有一些可以做你想做的事情的指示和定位。

    匹配只能作为4GL关键字提供。要在SQL中使用它,您需要使用嵌入式SQL-89,但是他们头脑中没有人会在4GL会话中编写SQL代码。它只作为一个营销复选框存在,并且它是一种完全无法用的方式来编写4GL代码。

    推荐文章