Progress DB SQL 的 LIKE 运算符

发布于 2024-08-10 16:52:06 字数 296 浏览 8 评论 0原文

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

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

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

谢谢

I'm trying to do something like this in Progress SQL (THIS IS NOT POSTGRES!)

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

However Progress does not support a LIKE operator. INSTR looks like it might do the job, but it is a Progress extension an isn't supported on the DB I am using. Is there another way of achieving this using standard ODBC functions?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

白龙吟 2024-08-17 16:52:06

Progress 4GL 中没有 LIKE 运算符。 (有一个 LIKE 关键字,但它用于不同的用途。)相反,您需要使用 MATCHESCONTAINS 运算符。我从未使用过 Progress 的 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

There is no LIKE operator in the Progress 4GL. (There is a LIKE keyword, but it is used for something different.) Instead you need to use MATCHES or CONTAINS operators. I've never used a SQL interface to Progress but it may be the same.

So you could try:

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

Note - MATCHES uses * for a wildcard instead of %.

Or:

SELECT
    CASE WHEN code CONTAINS 'foo' THEN 'Y' ELSE 'N' END as foo
FROM
    bar
仙女山的月亮 2024-08-17 16:52:06

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

Just found this question and to anybody who might still have a problem with it i suggest using SquirrelSQL Client, which allows you to write almost 100% SQL syntax towards the Progress base. Like included

北笙凉宸 2024-08-17 16:52:06

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

You can try with MATCHES (same syntax than LIKE) and maybe that works.

月隐月明月朦胧 2024-08-17 16:52:06

您使用的是哪个版本的 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 代码的方式。

What version of Progress are you using 10.0? 10.1? 10.2?

Are you using the embedded SQL-89 from within a 4GL session or are you using SQL-92 via an ODBC/JDBC connection? It sounds like you are using SQL-92 since you made reference to "drivers" and INSTR.

In any event there is no LIKE for SQL. There is INSTR and LOCATE which might do what you want though.

MATCHES is only available as a 4GL keyword. To use it in SQL you would need to be using embedded SQL-89 but nobody in their right mind would code SQL inside a 4GL session. It is only there as a marketing checkbox and it is a completely untenable way to write 4GL code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文