2009-11-13 18 views
2

LIKE操作我试图做这样的事情进展SQL(这不是POSTGRES!)进步DB SQL

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

但是进展不支持LIKE操作。 INSTR看起来像它可能做的工作,但它是一个进展扩展和我使用的数据库不支持。有没有另外一种使用标准ODBC函数来实现这个功能的方法

感谢

回答

5

有一个在进步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

MATCHES的对面是 - 不是myVariable MATCHES'* foo *' –

0

你可以用火柴尝试(相同的语法比等),也许这工作。

+0

有趣的是,我使用的OpenEdge 10名司机这似乎并不支持像 – Tarski

+0

呀真的,我误会你在哪里使用LIKE操作符。无论如何,比赛应该工作。 – pedromarce

0

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

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

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

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

1

刚刚发现了这个问题以及任何可能仍然存在问题的人,我建议使用SquirrelSQL客户端,它允许您将几乎100%的SQL语法写入Progress基础。像包括