Как исключить строки со значением varchar2, которое не является нулевым, но экспортирует как нулевое - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть некоторые данные, которые я не могу изменить, в столбце varchar2(800), который отображается в SQL Developer как null и экспортируется оттуда как null, но не является null.

Вот что я попробовал:

  • length(mycol) возврат 3
  • asciistr(mycol) возвращает null
  • substr(mycol, 1, 1) возвращает null (остальные позиции возвращают нормальные буквы)
  • ascii(substr(mycol, 1, 1)) возвращает 180, то есть острый акцент

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

Как я могу это сделать?

Я пробовал asciistr(mycol) is not null, но он также отфильтровывает текст с акцентированными символами, которые не экспортируются как null. Я хочу экспортировать символы с акцентом, но не тогда, когда весь столбец будет экспортирован как null.

mycol is not null и to_char(mycol) is not null не имели никакого эффекта.

Очевидно, мне нужно решение, которое будет работать при любой длине ввода и странности символов в любой позиции в поле.

1 Ответ

0 голосов
/ 07 ноября 2018

ASCII-код Acute accent - 239. Посмотрите на этот пример; посмотрим, поможет ли это.

Вставить некоторые значения в таблицу; одним из них является острый акцент :

SQL> create table test (mycol varchar2(10));

Table created.

SQL> insert into test values ('a');

1 row created.

SQL> insert into test values (chr(239));

1 row created.

SQL> select * from test;

MYCOL
----------
a
´

Что там хранится? Обратите внимание на функцию DUMP :

SQL> select mycol, dump(mycol) dmp, ascii(mycol) ascii
  2  from test;

MYCOL      DMP                    ASCII
---------- -------------------- -------
a          Typ=1 Len=1: 97           97
´          Typ=1 Len=1: 239         239

SQL> select * from test
  2  where ascii(mycol) <> 239;

MYCOL
----------
a

SQL>

Проверьте, что DUMP возвращает в вашем случае; может быть, есть еще мусор в столбце, но - если вы узнаете, что это на самом деле - вы могли бы даже UPDATE этот столбец и поставить "настоящий" NULL (или что-то еще) там.

...