opérateur LIKE pour le progrès DB SQL
-
19-09-2019 - |
Question
Je suis en train de faire quelque chose comme ça en cours SQL (ce n'est pas Postgres!)
SELECT
CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
FROM
bar
Toutefois, les progrès ne prend pas en charge un opérateur LIKE. INSTR
semble que cela pourrait faire le travail, mais il est une extension progrès ne sont pas pris en charge sur la base de données que je utilise. Y at-il une autre façon d'y parvenir en utilisant les fonctions standard ODBC?
Merci
La solution
Il n'y a pas d'opérateur de LIKE
dans le progrès 4GL. (Il y a un mot-clé LIKE
, mais il est utilisé pour quelque chose de différent.) Au lieu de cela, vous devez utiliser les opérateurs de MATCHES
ou CONTAINS
. Je ne l'ai jamais utilisé une interface SQL pour des progrès, mais il peut être le même.
Vous pouvez essayer:
SELECT
CASE WHEN code MATCHES '*foo*' THEN 'Y' ELSE 'N' END as foo
FROM
bar
Note -. MATCHES
utilise *
pour un caractère générique au lieu de %
Ou:
SELECT
CASE WHEN code CONTAINS 'foo' THEN 'Y' ELSE 'N' END as foo
FROM
bar
Autres conseils
Je viens de trouver cette question et à tous ceux qui pourraient encore avoir un problème avec elle, je suggère d'utiliser SquirrelSQL client, ce qui vous permet d'écrire près de 100% la syntaxe SQL vers la base Progress. Comme inclus
Vous pouvez essayer avec MATCHS (même syntaxe que ETC.) et peut-être qui fonctionne.
Quelle version de Progress vous utilisez 10.0? 10.1? 10.2?
Utilisez-vous l'embarqué SQL-89 à partir d'une session 4GL ou utilisez SQL-92 vous via une connexion ODBC / JDBC? On dirait que vous utilisez SQL-92 depuis que vous avez fait référence à « pilotes » et INSTR.
En tout état de cause il n'y a pas pour SQL COMME. Il y a INSTR et LOCATE qui pourrait faire ce que vous voulez bien.
MATCHES est disponible uniquement en tant que mot-clé 4GL. Pour l'utiliser dans SQL vous devez utiliser SQL-89 embarqué mais personne dans leur bon esprit de code SQL dans une session 4GL. Il est seulement là comme une case à cocher de marketing et il est une façon tout à fait indéfendable d'écrire du code 4GL.