Pergunta

Estou tentando fazer algo assim em andamento SQL (isso não é PostGres!)

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

No entanto, o progresso não suporta um operador semelhante. INSTR Parece que pode fazer o trabalho, mas é uma extensão de progresso e não é suportado no banco de dados que estou usando. Existe outra maneira de conseguir isso usando funções ODBC padrão?

Obrigado

Foi útil?

Solução

Não há LIKE Operador no Progress 4GL. (Existe um LIKE palavra -chave, mas é usada para algo diferente.) Em vez disso, você precisa usar MATCHES ou CONTAINS operadores. Eu nunca usei uma interface SQL para progredir, mas pode ser a mesma.

Então você poderia tentar:

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

Observação - MATCHES usos * para um curinga em vez de %.

Ou:

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

Outras dicas

Acabei de encontrar essa pergunta e para qualquer pessoa que ainda possa ter um problema, sugiro o uso do cliente SquirrelsQL, o que permite escrever quase 100% de sintaxe do SQL em relação à base de progresso. Como incluído

Você pode experimentar com correspondências (a mesma sintaxe do que o tipo) e talvez isso funcione.

Qual versão do progresso você está usando 10.0? 10.1? 10.2?

Você está usando o SQL-89 incorporado de uma sessão 4GL ou está usando o SQL-92 por meio de uma conexão ODBC/JDBC? Parece que você está usando o SQL-92, pois fez referência a "Drivers" e Instr.

De qualquer forma, não há como o SQL. Há Instr and Locate que pode fazer o que você deseja.

As correspondências estão disponíveis apenas como uma palavra -chave 4GL. Para usá-lo no SQL, você precisaria usar o SQL-89 incorporado, mas ninguém em sã consciência codificaria o SQL dentro de uma sessão 4GL. Está lá apenas como uma caixa de seleção de marketing e é uma maneira completamente insustentável de escrever o código 4GL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top