我正在尝试在 Progress SQL 中执行类似的操作(这不是 POSTGRES!)
SELECT
CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
FROM
bar
但是 Progress 不支持 LIKE 运算符。INSTR
看起来它可能会完成这项工作,但它是一个 Progress 扩展,我正在使用的数据库不支持它。是否有另一种使用标准 ODBC 函数来实现这一点的方法?
谢谢
我正在尝试在 Progress SQL 中执行类似的操作(这不是 POSTGRES!)
SELECT
CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
FROM
bar
但是 Progress 不支持 LIKE 运算符。INSTR
看起来它可能会完成这项工作,但它是一个 Progress 扩展,我正在使用的数据库不支持它。是否有另一种使用标准 ODBC 函数来实现这一点的方法?
谢谢
LIKE
Progress 4GL中没有运算符。(有一个LIKE
关键字,但它用于不同的东西。)相反,您需要使用MATCHES
orCONTAINS
运算符。我从未使用过 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
刚刚发现了这个问题,对于可能仍然有问题的任何人,我建议使用 SquirrelSQL Client,它允许您为 Progress 基础编写几乎 100% 的 SQL 语法。喜欢包括在内
您可以尝试使用 MATCHES(与 LIKE 相同的语法),也许这有效。
您使用的是哪个版本的 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 代码的一种完全站不住脚的方式。