номер varchar, начинающийся с + - PullRequest
1 голос
/ 06 апреля 2020

Ниже я пытаюсь выяснить, является ли значение столбца (dis_num) цифрой c или нет, которое работает нормально.

REGEXP_LIKE(dis_num, '^[[:digit:]]+$')

Теперь столбец dis_num может начинаться с +, а затем с цифр, таких как +8143434344. Как изменить вышеприведенное регулярное выражение, которое также начинается с +? Значит, если столбец имеет номер, начинающийся с +, то также нам нужно считать цифрой c.

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 апреля 2020

Если вы хотите проверить буквальный знак +, вы можете избежать его; и может сделать его необязательным с ?

REGEXP_LIKE(dis_num, '^\+?[[:digit:]]+$')

Очень быстрая демонстрация:

with t (dis_num) as (
  select '1234' from dual
  union all select 'abc' from dual
  union all select '+8143434344' from dual
)
select dis_num,
  case when REGEXP_LIKE(dis_num, '^[[:digit:]]+$') then 'Yes' else 'No' end as check1,
  case when REGEXP_LIKE(dis_num, '^\+?[[:digit:]]+$') then 'Yes' else 'No' end as check2
from t;

DIS_NUM     CHE CHE
----------- --- ---
1234        Yes Yes
abc         No  No 
+8143434344 No  Yes
1 голос
/ 06 апреля 2020

AS Littlefoot говорит, что вам нужно заменить +, а затем оценить строку.

Вы также можете использовать TRANSLATE, я думаю, что это довольно полезно для создания функции в любой oracle БД, которую вы можете вызывать где угодно, например так: :

  FUNCTION only_numbers(p_value VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    RETURN(TRANSLATE(p_value , '1' || TRANSLATE(p_value , 'a1234567890', 'a'), '1'));
  END only_numbers;

SELECT only_numbers (dis_num) FROM your_table тоже должен работать.

0 голосов
/ 06 апреля 2020

Сначала удалите +, затем проверьте:

REGEXP_LIKE(replace(dis_num, '+', ''), '^[[:digit:]]+$')
            -------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...