2016-09-07 3 views
0

Я переношу данные из одной базы данных Netezza в другую, используя инструмент Talend, инструмент ETL. Когда я извлекаю данные из поля varchar (30) и пытаюсь поместить его в поле varchar (30) новой базы данных, он дает ошибку, говоря, что он слишком длинный. Журналы показывают, что в поле есть пробел в конце, за которым следует квадрат, представляющий некоторый символ, который я не могу понять. Я прикрепил скриншот журналов ниже. Я попытался написать SQL, чтобы вытащить это поле и заменить то, что я считал CRLF, но не повезло. Когда я делаю выбор в поле и получаю длину, у него есть несколько дополнительных символов, чем то, что вы видите, поэтому что-то есть, и я хочу избавиться от него. Обрезка ничего не делает.Как избавиться от специального символа в столбцах Netezza

Этот SQL не возвращает длину, меньшую, чем просто длина length() для самого столбца. Кто-нибудь знает, что еще может быть?

SELECT LENGTH(trim(translate(TRANSLATE(<column>, chr(13), ''), chr(10), ''))) as len_modified 

Snapshot of the logs

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

ответ

1

Сохраните данные в большем размере целевой таблицы, которая работает. Если 30 символьных данных помещают его в таблицу с 500 символами. Получите его на работу. Затем просмотрите символ по символу в полях, которые являются самыми длинными, чтобы определить, какой символ добавляется. Используйте команды, такие как ascii(), чтобы определить значение ascii отдельных символов, а также начало и конец. Скорее всего, вы получаете дополнительный символ в начале или в конце. Определите, что такое дополнительные символьные данные, а затем пишите код, чтобы удалить его, или никогда не загружать его так, чтобы он помещался в столбец из 30 символов. Или просто оставьте свой целевой столбец длиннее и включите дополнительные символы. Например, Varchar (30) становится Varchar (32) (теряйте пространство, но не изменяйте данные, как он приходит к вам).

+0

Ваше предложение об использовании функции ascii было тем, что помогло мне понять, что это неразрывное пространство, значение unicode 160. Я просто запустил функцию ascii в столбце, используя символ в 29-м индексе (используя функцию подстроки). Я смог удалить его с помощью функции перевода и chr (160). Благодаря!! – Kelly

+0

Не проблема. Я столкнулся с этой проблемой 20+ раз. Это было мое решение, которое до сих пор работало каждый раз для меня. Есть списки других персонажей, многие из которых выглядят невидимыми, что вы можете увидеть эту проблему. –

Смежные вопросы