Причина в том, что Oracle путает пустую строку (''
) и NULL
значения. Итак, подстрока возвращает NULL
- и тогда большинство сравнений возвращают NULL
, а не false.
Один метод будет использовать LIKE
:
where ne.NODE not like '_________$_A%' escape '$'
Или regexp_like()
:
where regexp_like(ne.NODE, '^.{9}_A')
Или быть уверенным, что строка достаточно длинная:
where substr(ne.NODE || 'xxxxxxxxxxx', 9, 2) not in ('_A')
Или проверка длины, а также скороговорки.