3

我正在尝试在 Progress SQL 中执行类似的操作(这不是 POSTGRES!)

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

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

谢谢

4

4 回答 4

6

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

所以你可以尝试:

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
于 2009-11-13T12:21:45.427 回答
1

刚刚发现了这个问题,对于可能仍然有问题的任何人,我建议使用 SquirrelSQL Client,它允许您为 Progress 基础编写几乎 100% 的 SQL 语法。喜欢包括在内

于 2012-07-31T11:22:51.643 回答
0

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

于 2009-11-13T11:08:38.833 回答
0

您使用的是哪个版本的 Progress 10.0?10.1?10.2?

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

在任何情况下,SQL 都没有 LIKE。有 INSTR 和 LOCATE 可能会做你想做的事。

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

于 2009-11-17T15:35:43.857 回答