Строка 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;