Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REGEXP_LIKE и NULL / 7 сообщений из 7, страница 1 из 1
21.10.2010, 13:47
    #36912095
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
REGEXP_LIKE(NULL, REGEXP) == UNDEFINED (независимо от значения REGEXP)

Но такая логика меня не устраивает.
Зачастую случается так, что TARGET является пустой строкой и REGEXP составлен так, что под него попадает и пустая строка (Хотя, на самом деле я не знаю значение REGEXP - оно передается параметром).

Что делать?
Есть ли какая-нибудь возможность !по-человечески! узнать попадает ли TERGET под REGEXP или нет?
...
Рейтинг: 0 / 0
21.10.2010, 13:56
    #36912144
comphead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
...
Рейтинг: 0 / 0
21.10.2010, 14:02
    #36912173
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
comphead,

и что там?
вы имеете в виду модификатор 'i' (specifies case-insensitive matching) ?

select count(*) from dual where not regexp_like(null, '1', 'i')

>0


select count(*) from dual where not regexp_like(null, '1?', 'i')

>0
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
01.06.2020, 14:59
    #39965043
TRust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
У меня сейчас ровно та же проблема.
Нашлось ли за это время какое-то решение?
...
Рейтинг: 0 / 0
01.06.2020, 15:32
    #39965061
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
TRust,

либо обходиться с помощью nvl - например, nvl(s,chr(0):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with t(s) as (select * from table(sys.odcivarchar2list('a','b',null)))
select 
  ss,
  case 
     when     regexp_like(ss, '1?', 'i') then 'true' 
     when not regexp_like(ss, '1?', 'i') then 'false' 
     else 'undef' 
  end re 
from (
    select nvl(s,chr(0)) ss
    from t
);

SS         RE
---------- -----
a          true
b          true
           true


или если если пользуетесь расширенными регулярными выражениями (POSIX ERE или PCRE, как в большинстве языков типа Perl, Java, и тд) можно воспользоваться моим пакетом XT_REGEXP :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t(s) as (select * from table(sys.odcivarchar2list('a','b',null)))
select s, xt_regexp.get_matches(s, '1?') RE from t;

S          RE
---------- -----------------------------------
a          VARCHAR2_TABLE('', '')
b          VARCHAR2_TABLE('', '')
           VARCHAR2_TABLE('')

3 rows selected.


если только проверить, а не вернуть найденное то можно воспользоваться cardilnaty(xt_regexp.get_matches(...)):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t(s) as (select * from table(sys.odcivarchar2list('a','b',null)))
select s, cardinality(xt_regexp.get_matches(s, '1?')) cnt from t;

S                 CNT
---------- ----------
a                   2
b                   2
                    1

3 rows selected.
...
Рейтинг: 0 / 0
01.06.2020, 15:41
    #39965063
TRust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
xtender, в случае шаблона ^$

regexp_like('', '^$') вернёт null и мы ничего не выясним. А надо бы true.
В общем случае, когда заранее шаблон регулярного выражения неизвестен, это не работает.
...
Рейтинг: 0 / 0
01.06.2020, 16:00
    #39965069
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REGEXP_LIKE и NULL
TRust,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t(s) as (select * from table(sys.odcivarchar2list('a','b',null)))
select s, cardinality(xt_regexp.get_matches(s, '^$')) cnt from t;

S                 CNT
---------- ----------
a                   0
b                   0
                    1

3 rows selected.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REGEXP_LIKE и NULL / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]