Como operador para progresso db sql
-
19-09-2019 - |
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
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.