【问题标题】:Teradata string truncated after UNION ALLTeradata 字符串在 UNION ALL 后被截断
【发布时间】:2015-01-25 09:57:27
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 很抱歉,查询没有执行。它会引发语法错误。
    • 如果是 char(6) 而不是 nvarchar(6),则上述查询有效。谢谢你的建议。您能否更新您的查询,以便我接受您的回答。
    • 改成 varchar 忘了 teradata 中不存在 nvarchar
    • CAST('abc' AS varchar(255)) 为我工作。 TD 14.10.07.07
    【解决方案2】:

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

    SELECT 'abc' (varchar(99))  as xxx 
    FROM tbl1
    UNION ALL
    select 'defghi' as xxx
    FROM tbl2;
    

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多