Вопрос

Я пытаюсь сделать что -то подобное в процессе SQL (это не постгры!)

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

Однако прогресс не поддерживает подобного оператора. INSTR Похоже, это может сделать работу, но это расширение прогресса, которое не поддерживается на БД, который я использую. Есть ли другой способ достижения этого с использованием стандартных функций ODBC?

Спасибо

Это было полезно?

Решение

Здесь нет LIKE Оператор в прогрессе 4GL. (Eсть LIKE ключевое слово, но оно используется для чего -то другого.) Вместо этого вам нужно использовать MATCHES или же CONTAINS операторы. Я никогда не использовал интерфейс 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

Другие советы

Только что нашел этот вопрос и всем, у кого все еще есть проблема с ним, я предлагаю использовать клиент SquirrelsQl, который позволяет вам писать почти 100% синтаксис SQL в направлении базы прогресса. Как включен

Вы можете попробовать с матчами (тот же синтаксис, что и), и, возможно, это работает.

Какую версию прогресса вы используете 10.0? 10.1? 10.2?

Вы используете встроенный SQL-89 из сеанса 4GL или используете SQL-92 через соединение ODBC/JDBC? Похоже, вы используете SQL-92, так как вы ссылались на «драйверы» и Instr.

В любом случае, SQL нет. Есть инструмент и найти, что может делать то, что вы хотите.

Матчи доступны только как ключевое слово 4GL. Чтобы использовать его в SQL, вам нужно использовать встроенный SQL-89, но никто в здравом уме не кодирует SQL в сеансе 4GL. Это только там как маркетинговый флажок, и это совершенно несостоятельный способ написать код 4GL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top