3

私は進行中のSQLでこのようなことをしようとしています(これはPOSTGRESではありません!)

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

ただし、Progress は LIKE 演算子をサポートしていません。INSTRそれは仕事をするかもしれないように見えますが、それはプログレス拡張機能であり、私が使用しているDBではサポートされていません. 標準の ODBC 関数を使用してこれを達成する別の方法はありますか?

ありがとう

4

4 に答える 4

6

LIKEProgress 4GL にはオペレーターはありません。(LIKEキーワードがありますが、別の目的で使用されます。) 代わりにMATCHESorCONTAINS演算子を使用する必要があります。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
于 2009-11-13T12:21:45.427 に答える
1

この質問を見つけたばかりで、まだ問題がある可能性がある人には、SquirrelSQL クライアントを使用することをお勧めします。これにより、Progress ベースに対してほぼ 100% SQL 構文を記述できます。含まれているように

于 2012-07-31T11:22:51.643 に答える
0

どのバージョンの Progress を使用していますか? 10.0 を使用していますか? 10.1? 10.2?

4GL セッション内から埋め込み SQL-89 を使用していますか、それとも ODBC/JDBC 接続経由で SQL-92 を使用していますか? 「ドライバー」とINSTRを参照したため、SQL-92を使用しているようです。

いずれにせよ、SQL には LIKE はありません。しかし、あなたが望むことをするかもしれない INSTR と LOCATE があります。

MATCHES は、4GL キーワードとしてのみ使用できます。SQL で使用するには、埋め込み SQL-89 を使用する必要がありますが、4GL セッション内で SQL をコーディングする人は正気ではありません。これはマーケティング チェックボックスとしてのみ存在し、4GL コードを記述する方法としてはまったく受け入れられません。

于 2009-11-17T15:35:43.857 に答える
0

MATCHES (LIKE と同じ構文) を試してみると、うまくいくかもしれません。

于 2009-11-13T11:08:38.833 に答える