Как оператор для прогресса DB SQL
-
19-09-2019 - |
Вопрос
Я пытаюсь сделать что -то подобное в процессе 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.