2017-02-21 43 views
1

У меня есть две таблицы A и B. И я хочу присоединиться к A с B на A.col_1 = B.col_2. col_1 имеет тип данных VARCHAR (35), в то время как col_2 имеет тип данных CHAR (35). Следующий оператор вызвал проблему при соединении двух таблиц: нет записи, что означает, что обе таблицы не могут быть объединены. col_1 обычно имеет 8 - 11 цифр, то же самое с col_2. Мое понимание - это то, что даже я использовал «LENGTH (B.col_2) -1», но конечные пробелы не должны быть проблемой, если значения col_1 и col_2 совпадают.Teradata - соединение char с varchar

В чем причина этой проблемы?

ON A.col_1 =SUBSTR(B.col_2 ,1,LENGTH(B.col_2)-1) 

Спасибо!

+0

Есть ли у Teradata функция дифферента? –

+0

Привет, Да, у Терадаты есть обрезка, и это было мое оригинальное решение, которое сработало. Но мой вопрос заключался в том, что конечные пробелы не имеют значения при объединении, когда нужно было урезать конечные пробелы? Я сделал изменения, но когда я оглядываюсь назад, мне любопытно. – thatMeow

ответ

1

Я предполагаю, что B - это символ. Это объяснит вам, что здесь происходит:

select char_length(cast('abc' as char(10))); 

Ваша подстрока не принимает реальную длину строки полукокса, но проложенной длину, поэтому вы получаете оригинальную строку минус 1 пространство.

Для решения использовать выпуск -

SUBSTR(B.col_2 ,1,LENGTH(cast(B.col_2 as varchar(35))-1) 

или

SUBSTR(B.col_2 ,1,LENGTH(rtrim(B.col_2)-1) 

... и да, символ/VARCHAR не имеет значения для сравнения

select 1 where cast('abc' as varchar(10)) = cast('abc' as char(10)) 
+0

Спасибо за быстрый ответ, я очень благодарен. Поэтому я сделал проверки char2hexint, и, например, для одной записи у меня есть «3535363130393031» для col_1 и «3535363130393031352020202020202020202020202020202020202020202020202020» для второй колонки. Что это значит? Благодаря! – thatMeow

+0

Вы посмотрели? –

+0

Привет, Дуду, у меня было то же самое решение, что и вы. Но мой вопрос: поскольку конечные пробелы не имеют значения при объединении char и varchar, пока значение равно. Таким образом, даже длины не равны, они должны иметь возможность соединяться друг с другом. Есть ли другие причины, которые могут вызвать эту проблему? – thatMeow