В Oracle, как выбрать строки, которые содержат символ в пределах определенного числового диапазона? - PullRequest
3 голосов
/ 13 мая 2011

У меня есть таблица в Oracle с колонкой VARCHAR, которая называется DESCRIPTION.Некоторые строки содержат непечатаемые символы, такие как символ с числовым значением 150 (который не на латинице-1 и является «Начало защищенной области» в Unicode).

Я хочу выбрать все строки, столбцы DESCRIPTION которых содержат символ, числовое значение которого находится в диапазоне от 128 до 160. Можно ли сделать это без длинного списка предложений LIKE ИЛИ вместе?Я полагаю, что это можно сделать с помощью регулярных выражений, но я не нашел способа сделать это.

Ответы [ 3 ]

5 голосов
/ 13 мая 2011

Недавно мне пришлось сделать что-то очень похожее и использовать такой SQL-код:

with codes as (select rownum code from dual connect by level <= 160)
select distinct t.id, t.description
from mytable t, codes c
where t.description like '%' || chr(c.code) || '%'
and c.code >= 128;
1 голос
/ 23 июля 2014

Пост Винсента мне очень помог с этой проблемой! Я хотел найти все строки, которые имели расширенный ASCII: 128-255, поэтому я сократил выражение до следующего:

SELECT description
FROM your_table
WHERE regexp_like (description, '['||chr(128)||'-'||chr(255)||']');

Короткий способ захвата диапазона.

0 голосов
/ 13 мая 2011

Вы можете использовать регулярное выражение, оно может работать лучше, чем 30+ одно предложение WHERE, но оно не будет намного красивее:

SELECT * 
  FROM your_table 
 WHERE regexp_like(description, '['||chr(128)||chr(129)||...||chr(160)||']')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...