Столбец Teradata неправильно сортируется - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь объединить две таблицы по столбцу и отсортировать таблицу по одному столбцу.

Вот некоторые примеры данных из двух таблиц:

table.x

state
00039
01156

table.y

state
39
1156

Как объединить и отсортировать таблицы в помощнике по SQL?

1 Ответ

0 голосов
/ 27 июня 2018

Самое простое решение - привести обе стороны к integer, как упоминал @Andrew, так что вы можете использовать простое приведение, или trycast(...), который попытается привести значение и, если это не удастся, не вернет ошибку, но NULL значение вместо:

select *
from x
inner join y on
  trycast(y.state as integer) = trycast(y.state as integer)
order by y.state

Старый ответ (оставьте это здесь ради будущих читателей и того, что вы можете / не можете сделать):

Если у вас последняя версия Teradata (вы ее не указали), у вас также будет функция LPAD. Предполагая, что y.state - это не текст, а число, которое нам также необходимо привести, поскольку lpad принимает строку в качестве аргумента. Если это так, опустите cast(...):

select *
from x
inner join y on
  x.state = lpad(cast(y.state as varchar(5)), 5, '0')
order by y.state

Если у вас нет функции LPAD, вам может пригодиться грязный код с substring:

select *
from x
inner join y on
  x.state = substring('00000' from char_length(cast(y.state as varchar(5))+1) || cast(y.state as varchar(5)
order by y.state

Выше предполагается, что вы храните номера в пределах максимум 5 цифр. Если оно превышает это число (в ваших данных для примера указано 5), вам необходимо изменить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...