Невозможно использовать instr в substr в запросе sql - PullRequest
0 голосов
/ 29 мая 2018

Я использую sql utility, который интегрирован в Solaris 10.Я хочу получить столбец в таблице, но, похоже, моя утилита sql не позволяет.

Ниже приведен мой код

SELECT
    DBExternalAlarm.m_ObjectDN,
    INSTR(DBExternalAlarm.m_ObjectDN,'@@',30),
    SUBSTR(DBExternalAlarm.m_ObjectDN,1,INSTR(DBExternalAlarm.m_ObjectDN,'@@',30))
FROM DBExternalAlarm;

Результат содержит только 2 столбца данных

- DBExternalAlarm.m_ObjectDN
- INSTR(DBExternalAlarm.m_ObjectDN,'@@',30)

Я не знаю, любое тело может дать другой способ решить эту проблему.Могу ли я использовать переменную или другую функцию?

1 Ответ

0 голосов
/ 29 мая 2018

Полагаю, здесь - это третий столбец, возвращаемый в вашем наборе результатов, но это просто пустая строка, потому что @@ не найдено, начиная с 30-й позиции.Чтобы проверить эту гипотезу, используйте следующий запрос:

SELECT
    DBExternalAlarm.m_ObjectDN,
    INSTR(DBExternalAlarm.m_ObjectDN,'@@',30),
    CASE WHEN INSTR(DBExternalAlarm.m_ObjectDN,'@@',30) > 0
         THEN SUBSTR(DBExternalAlarm.m_ObjectDN, 1,
             INSTR(DBExternalAlarm.m_ObjectDN,'@@',30))
         ELSE 'Not Found' END AS result
FROM DBExternalAlarm;

Я не знаю вашу базу данных, но в Oracle INSTR вернет 0, если строка не найдена.Приведенное выше выражение CASE проверяет это и в этом случае выдает Not Found.Если вы увидите это повсюду, то узнаете, что совпадений нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...