การบวกศูนย์นำหน้าหากความยาวไม่เท่ากับ 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