Как получить индекс подстроки в Oracle - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующее поле в моей БД (Oracle)

Jayson,1990,3,july

И я хотел бы получить все значения здесь. Каким было бы решение?

Ответы [ 3 ]

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

Извините за плохое описание. Сначала я хочу получить первое имя как FirstName, затем дату как Date, а затем день как Day.Так я хочу возвращать меня каждый раз по одной строке. Я выполню его 4 раза, чтобы получить все результаты

РЕЗУЛЬТАТ:

Name:
Jayson

Date:
 1990

Day:
3
0 голосов
/ 17 мая 2018
 SELECT CASE WHEN rn = 1 THEN 'Name: '
                      WHEN rn =2 THEN 'Year: '
                      WHEN rn = 3 THEN 'Day: '
                      WHEN rn = 4 THEN 'Month: ' END || result "Results"
                      FROM
 (
 WITH TEST (col) AS
 (SELECT 'Jayson,1990,3,july' FROM dual)
 SELECT REGEXP_SUBSTR(col, '[^,]+', 1, LEVEL) result, ROWNUM rn
FROM TEST
connect BY LEVEL <= REGEXP_COUNT(col, ',') + 1
);

enter image description here

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

Я хотел бы получить все значения здесь

Где находится "здесь"?

Что-то вроде этого, возможно?

SQL> with test (col) as
  2    (select 'Jayson,1990,3,july' from dual)
  3  select regexp_substr(col, '[^,]+', 1, level) result
  4  from test
  5  connect by level <= regexp_count(col, ',') + 1;

RESULT
------------------
Jayson
1990
3
july

SQL>

[РЕДАКТИРОВАТЬ, увидев комментарий]

Два простых варианта: один - использовать REGEXP_SUBSTR, другой - традиционный SUBSTR + INSTR комбинация:

SQL> with test (col) as
  2    (select 'Jayson,1990,3,july' from dual)
  3  select
  4    regexp_substr(col, '\w+', 1, 1) name,
  5    regexp_substr(col, '\w+', 1, 2) year,
  6    regexp_substr(col, '\w+', 1, 3) day,
  7    regexp_substr(col, '\w+', 1, 1) month,
  8    --
  9    substr(col, 1, instr(col, ',', 1, 1) - 1) name_2,
 10    substr(col, instr(col, ',', 1, 1) + 1, instr(col, ',', 1, 2) - instr(col, ',', 1, 1) - 1) year_2,
 11    substr(col, instr(col, ',', 1, 2) + 1, instr(col, ',', 1, 3) - instr(col, ',', 1, 2) - 1) day_2,
 12    substr(col, instr(col, ',', 1, 3) + 1) month_2
 13  from test;

NAME   YEAR D MONTH  NAME_2 YEAR D MONT
------ ---- - ------ ------ ---- - ----
Jayson 1990 3 Jayson Jayson 1990 3 july

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