UNION ALL之后截断的Teradata字符串

问题描述 投票:4回答:2

我有一个带有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;

这会给我预期的输出。但是还有更好的选择吗?

teradata union-all
2个回答
10
投票

采用第一个数据类型,但是在这种情况下,您可以将其强制转换为所需的数据类型,例如char(6),否则该列将保留为char(3)

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

0
投票

最简单的解决方案是设置第一行的数据类型。

SELECT 'abc' (varchar(99))  as xxx 
FROM tbl1
UNION ALL
select 'defghi' as xxx
FROM tbl2;
© www.soinside.com 2019 - 2024. All rights reserved.