Teradata CONCAT, кажется, создает дополнительные пробелы - PullRequest
1 голос
/ 08 июля 2019

У меня есть следующий код и вывод

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

output

Как вы можете видеть в выводе, есть куча лишних пробелов, которых там быть не должно. Хотя это функционально, это не красиво. Для фона min_value и max_value - это столбцы NUMBER (10,0) в этой таблице.

Когда я пытаюсь добавить TRIM (до CONCAT, он тоже ничего не делает.

Буду признателен всем, у кого есть понимание и помощь в этом вопросе!

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Для тех, кто сталкивается с этим в будущем, вот исправление. По сути, вы должны обрезать КАЖДУЮ часть (потому что есть пробелы, идущие от каждой части). Это должно выглядеть так:

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

Применение TRIM до CONCAT ничего не сделает для вас. Они должны быть с самими ценностями.

0 голосов
/ 08 июля 2019

Неявное приведение добавляет пробел, чтобы соответствовать размеру числового поля. Вы можете либо урезать его (это работает для меня), либо явно привести число к varchar. Я бы пошел с явным приведением, а не большим поклонником неявного.

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

Оба они возвращаются a1 для меня.

...