Как выбрать подстроку в Oracle SQL только для определенной длины - PullRequest
0 голосов
/ 16 мая 2018

у меня ниже значения из столбца

  • Q6wabc89WmrtUX2pNYRnwjInCAT9ZxvaY7N7KAG440360130
  • Q6wabc89WmrtUX2pNYRnwwjInCAT9ZxvaY7N7KAG4a403648jInCAT9ZxvaY7N7KwjInCAT9ZxvaY7N7AG4403601AGd4s197

Длина первого значения 48.

Длина второго значения 97.

Теперь условие состоит в том, что если длина равна 97 для любого значения, тогда используйте первые 48 символов, только в противном случае используйте то, что когда-либо существовало.

Функция SUBSTR уже существует

SELECT SUBSTR(CLNT_ID,0,48) FROM CLNT; 

, который работает нормально. Теперь я хочу использовать это только в том случае, если длина значения равна 97.

Этот оператор Select является частью одной процедуры хранения. Пожалуйста, помогите определить правильный запрос для этого. Заранее спасибо

Ответы [ 3 ]

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

Вы также можете попробовать этот способ,

SELECT CASE SIGN( LENGTH(:p_text) - 97 )
            WHEN -1 THEN
                :p_text
            ELSE
                SUBSTR(:p_text, 1, 48)
       END
  FROM dual;
0 голосов
/ 16 мая 2018

Я думаю, что самый простой способ - это использовать length():

select (case when length(clnt_id) = 97
             then substr(clnt_id, 1, 48)
             else clnt_id
        end)
from clnt;

Казалось бы, это самая простая реализация логики.Также обратите внимание, что второй аргумент для substr() считается от «1», а не «0», поэтому вы должны использовать «1» (эффект тот же).

0 голосов
/ 16 мая 2018
SELECT 
case 
  when regexp_like (CLNT_ID , '^[[:alnum:]]{97}$') 
  then SUBSTR(CLNT_ID,0,48) 
  else null 
end label1, CLNT_ID
FROM CLNT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...