我有一个带有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;
这会给我预期的输出。但是还有更好的选择吗?
采用第一个数据类型,但是在这种情况下,您可以将其强制转换为所需的数据类型,例如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;