Строка Teradata усекается после UNION ALL

У меня есть запрос с предложением UNION. Одним из полей является простая жестко закодированная строка. Строка в операторе после UNION усекается, чтобы соответствовать длине строки поля перед UNION. Звучит запутанно? Вот пример.

SELECT 'abc' as xxx 
FROM tbl1
UNION ALL
select 'defghi' as xxx
FROM tbl2;

Для вышеприведенного запроса я ожидаю, что результат будет

abc
defghi

Тем не менее, выход

abc
def

Какие-нибудь мысли?

РЕДАКТИРОВАТЬ: Обходной путь, который я знаю в настоящее время, состоит в том, чтобы оператор SELECT с более длинной строкой появлялся перед UNION. т.е.

SELECT 'defghi' as xxx 
FROM tbl2
UNION ALL
select 'abc' as xxx
FROM tbl1;

Это дало бы мне ожидаемый результат. Но есть ли лучшая альтернатива?

1 ответ

Решение

Первый тип данных берется, но вы можете привести его к желаемому типу данных, например к char(6), в противном случае столбец останется char(3)

SELECT CAST('abc' as char(6)) as xxx 
FROM tbl1
UNION ALL
select 'defghi' as xxx
FROM tbl2;

Самое простое решение - установить тип данных для первой строки.

SELECT 'abc' (varchar(99))  as xxx 
FROM tbl1
UNION ALL
select 'defghi' as xxx
FROM tbl2;
Другие вопросы по тегам