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 不会为您做任何事情。他们需要与自己的价值观保持一致。
我有以下代码和输出
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 不会为您做任何事情。他们需要与自己的价值观保持一致。