Строковые значения до последней запятой (максимум 20 символов) в Oracle - PullRequest
0 голосов
/ 27 августа 2018

У меня есть требование сделать данные в Oracle, как показано ниже:

Условие: - значения до последней запятой (максимум 20 символов).

Data                       | Length | Output
----------------------------------------------------
12,34,abc,D,eva,096,qwerty | 26     | 12,34,abc,D,eva,096
----------
12,34,abc,DEF,0014,nish    | 23     | 12,34,abc,DEF,0014
----------
12,34,abc,DEF,0014,gup,    | 23     | 12,34,abc,DEF,0014
----------
12,34,abc,D,eva            | 15     | 12,34,abc,D,eva
----------

Я пытался выполнить запрос ниже, чтобы получить данные, в результате чего они приводили запятую в конце, и я не знаю, как ограничить ограничение строки в регулярном выражении.

SELECT regexp_substr ('12, 34, abc, DEF, 0014, nish ',' (.) +, ') FROM dual;

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Попробуйте regexp_replace(substr(your_string||',', 1, 21), ',[^,]*$')

0 голосов
/ 27 августа 2018

Следующее даст результат, который вы, похоже, ищете, но я не уверен, что это правильно, так как я подозреваю, что в назначении есть нечто большее, чем было упомянуто:

SELECT LINE,
       LENGTH(LINE) AS ORIGINAL_LENGTH,
       CASE
         WHEN LENGTH(LINE) > 20 THEN
           SUBSTR(LINE, 1, INSTR(TRIM(',' FROM LINE), ',', -1)-1)
         ELSE LINE
       END AS RESULT
  FROM DATA

SQLFiddle здесь

Удачи.

...