Как выбрать первую половину части данных, разделенных на трубы - PullRequest
1 голос
/ 10 мая 2019

Данные в каждой записи столбца с именем REQUEST_IP_ADDR указаны ниже '10 .247.32.44 | 10.247.32.44. Как выбрать только 1-ую часть, которая является 10.247.32.44?

- Ниже приведен запрос выбора, который я пытаюсь запустить

SELECT DISTINCT MSG_TYPE_CD, SRC, SRC_IP from MESSAGE_LOG order by MSG_TYPE_CD;

- моя таблица выглядит так:

MSG_TYPE_CD   SRC              SRC_IP
KB0192        ZOHO         10.247.32.44 | 10.247.32.44
KB0192        ZOHO         10.247.32.45 | 10.247.32.45
KB0192        ZOHO         127.0.0.1 | 10.240.20.137
KB0192        ZOHO         127.0.0.1 | 10.240.20.138
KB0196        GUPSHUP          10.240.20.59 | 10.10.1.19

Я хочу выбрать только 1-ю часть данных, которая находится перед каналом

1 Ответ

3 голосов
/ 10 мая 2019

Используя базовые строковые функции, мы можем попробовать:

SELECT
    SRC_IP,
    SUBSTR(SRC_IP, 1, INSTR(SRC_IP, '|') - 2) AS first_ip
FROM MESSAGE_LOG
ORDER BY
    MSG_TYPE_CD;

enter image description here

Демо

Логика, стоящая за первым запросом, заключается в том, что мы находим положение канала |, используя INSTR.Затем мы берем подстроку от первого символа до двух символов перед каналом (чтобы исключить как канал, так и пространство перед ним).

Очень гладкий ответ с использованием REGEXP_SUBSTR:

SELECT
    SRC_IP,
    REGEXP_SUBSTR(SRC_IP, '^[^ |]+') AS first_ip
FROM MESSAGE_LOG
ORDER BY
    MSG_TYPE_CD;

Демо

Здесь используется шаблон регулярного выражения:

^[^ |]+

Это говорит о том, что нужно взятьлюбой символ в начале столбца SRC_IP, который не пробел или pipe |.Это значит, взять первый IP-адрес.

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