Teradata CONCAT 似乎创建了额外的空间

Teradata CONCAT seems to create extra spaces

我有以下代码和输出

select
case
when min_value = 2500000 then CONCAT('>$', min_value)
when max_value= 0 then  CONCAT('<$', max_value)
when max_value= 749999 then CONCAT('$',min_value, ' - ', '$', max_value + 1)
when max_value= 1499999 then CONCAT('$',min_value, ' - ', '$', max_value + 1)
when max_value= 2499999 then CONCAT('$',min_value, ' - ', '$', max_value + 1)
end as range_,
from mytable

如您在输出中所见,有一堆不应该存在的额外空格。虽然这很实用,但并不漂亮。对于背景,min_value 和 max_value 都是此 table 中的 NUMBER(10,0) 列。

当我尝试在 CONCAT 之前添加 TRIM( 时,它也没有做任何事情。

非常感谢任何对此问题有见识和帮助的人!

隐式转换正在添加白色 space 以匹配数字字段的大小。您可以 trim 它(它对我有用),或者明确地将数字转换为 varchar。我会选择显式转换,而不是隐式转换的忠实拥护者。

select 
'a' || trim(cast(1 as number(10))),
'a' || cast(cast(1  as number(10)) as varchar(10))

这两个 return a1 对我来说。

对于以后遇到此问题的人,这里是解决方法。基本上,您必须 trim 每个部分(因为每个部分都有空格)。它应该是这样的:

CONCAT('$',TRIM(min_value), ' - ', '$', TRIM(max_value + 1))

在 CONCAT 之前应用 TRIM 不会为您做任何事情。他们需要与自己的价值观保持一致。