用于Progress DB SQL的LIKE运算符

时间:2009-11-13 10:01:23

标签: sql sql-like case-statement openedge progress-db

我正在尝试在Progress SQL中做这样的事情(这不是POSTGRES!)

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

但是Progress不支持LIKE运算符。 INSTR看起来可能会完成这项工作,但它是一个Progress扩展,我正在使用的数据库不支持。是否有另一种使用标准ODBC函数实现此目的的方法?

由于

4 个答案:

答案 0 :(得分:5)

Progress 4GL中没有LIKE运算符。 (有LIKE个关键字,但它用于不同的内容。)相反,您需要使用MATCHESCONTAINS个运算符。我从来没有使用过SQL接口来进行改进,但它可能是相同的。

所以你可以试试:

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

注意 - MATCHES使用*代替通配符代替%

或者:

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

答案 1 :(得分:1)

刚刚发现这个问题,对于任何可能仍有问题的人我建议使用SquirrelSQL Client,它允许你向Progress基础编写几乎100%的SQL语法。像包括

答案 2 :(得分:0)

您可以尝试使用MATCHES(与LIKE语法相同),也许这样可行。

答案 3 :(得分:0)

您使用的是什么版本的Progress? 10.1? 10.2?

您是在4GL会话中使用嵌入式SQL-89还是通过ODBC / JDBC连接使用SQL-92?听起来你使用的是SQL-92,因为你引用了“drivers”和INSTR。

无论如何,SQL都没有LIKE。有INSTR和LOCATE可能会做你想要的。

MATCHES仅作为4GL关键字提供。要在SQL中使用它,您需要使用嵌入式SQL-89,但正确思想中没有人会在4GL会话中编写SQL代码。它只是作为营销复选框,它是一种完全站不住脚的4GL代码。