2009-11-13 44 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基礎。像包括