Добавление ведущего нуля, если длина не равна 10 цифрам с использованием sql

Я пытаюсь объединить 2 таблицы, но моя проблема в том, что одна из таблиц имеет 10-значный номер, а другая может иметь 10-значный или менее значный номер. По этой причине я теряю некоторые данные, поэтому я хотел бы сначала проверить длину, если длина меньше 10 цифр, тогда я хочу добавить ведущие нули, чтобы я мог сделать это 10-значным числом. Я хочу сделать это, когда я присоединяюсь к этому, поэтому я не уверен, возможно ли это. Вот пример, если у меня есть 251458 в TABLE_WITHOUT_LEADING_ZERO, тогда я хочу изменить его следующим образом: 0000251458. Вот что у меня есть до сих пор:

select ACCT_NUM, H.CODE
 FROM TABLE_WITH_LEEDING_ZERO D,  TABLE_WITHOUT_LEADING_ZERO H
 WHERE substring(D.ACCT_NUM from position('.' in D.ACCT_NUM) + 2) = cast (H.CODE as varchar (10))

Благодарность


person moe    schedule 01.11.2013    source источник
comment
Поскольку я не знаю, как это сделать в postgresql, я удалил свой ответ.   -  person Giannis Paraskevopoulos    schedule 01.11.2013
comment
Используйте что-то вроде select lpad('12345', 10, '0000000000')   -  person Kaf    schedule 01.11.2013
comment
kaf, большое спасибо, ваше решение помогло. еще раз спасибо   -  person moe    schedule 01.11.2013
comment
10 нулей в третьем параметре можно уменьшить до 1: select lpad('12345', 10, '0');   -  person steviethecat    schedule 03.11.2015


Ответы (2)


В Netezza вы можете использовать LPAD:

select lpad(s.sample,10,0) as result
from (select 12345 as sample) s

    result
   -------
  0000012345

Однако было бы более эффективно удалить нули, как в примере ниже:

select cast(trim(Leading '0' from s.sample) as integer) as result
from (select '0000012345' as sample) s

    result
   -------
    12345
person Niederee    schedule 27.11.2013

Другая альтернатива:

SELECT TO_CHAR(12345,'fm0000000000');
  to_char   
------------
 0000012345
person bma    schedule 01.11.2013
comment
Но обратите внимание, что lpad() обычно также работает со строкой, содержащей нецифры, тогда как to_char() работает только при преобразовании числовых типов в строку. - person MarHoff; 11.01.2017