2017-05-23 3 views
0

Ich schreibe einen Export für einen Client und sie verlangen, dass jede Spalte genau 10 Zeichen lang ist. Im exoprt habe ich eine Spalte, die als char (10) formatiert ist, das ist unsere Rechnungsnummer, aber ist nur 6 Zeichen lang, also muss ich 3 führende Nullen hinzufügen. Dies ist, was ich habe versucht:Wie kann ich führende Nullen zu einem Char hinzufügen?

SELECT '000'+invno, invdte, '000'+item, brnkcomp, tqtyshp,price, bextpri, descrip 
FROM artran a 
LEFT JOIN arcust b ON a.custno = b.custno 
WHERE invdte BETWEEN DATEADD("d",-7,GETDATE()) and GETDATE() AND item IN ('10120','1000290','30234','10491','10747','21449') 

Aber die reult dafür hat immer einen Raum zwischen dem 0-en und der Rechnungsnummer. Ich kann den Platz nicht haben.

000 6325290 
000 6325301 
000 6325331 
000 6325357 
000 6325369 
000 6325400 

Ich habe auch versucht, diese mit den gleichen Ergebnissen der einen Raum zwischen dem 0'en und mit der Rechnung #

SELECT LEFT('000'+CAST(invno AS VARCHAR(15)),15) 
FROM artran a 
LEFT JOIN arcust b ON a.custno = b.custno 
WHERE invdte BETWEEN DATEADD("d",-7,GETDATE()) and GETDATE() AND item IN ('10120','1000290','30234','10491','10747','21449') 

000 6325290 
000 6325301 
000 6325331 
000 6325357 
000 6325369 
000 6325400 

ich die Ausgabe wie diese Ergebnisse aussehen würde:

0006325290 
0006325301 
0006325331 
0006325357 
0006325369 
0006325400 

Ich führe diesen Export in SSRS, also wenn es eine Möglichkeit gibt, es dort einfacher zu tun, könnte ich es auch so machen. Vielen Dank!

+0

Was ist die Art von 'invno'? – DigiFriend

+2

char = feste Länge und Pads w/Leerzeichen varchar = variable Länge keine Leerzeichen ... also wenn Sie 000's RECHTS hinzufügen möchten ('0000000000' + ISNULL (trimmen (Feld), ''), 10) – xQbert

+0

Das war es. ... danke xQBert! – IowaMatt

Antwort

3

können Sie Format (Spalte 'D10'), wie unten

SELECT Format(invno, 'D10') as InvNo, invdte, '000'+item, brnkcomp, tqtyshp,price, bextpri, descrip 
FROM artran a 
LEFT JOIN arcust b ON a.custno = b.custno 
WHERE invdte BETWEEN DATEADD("d",-7,GETDATE()) and GETDATE() AND item IN 
    ('10120','1000290','30234','10491','10747','21449') 

Andere Art und Weise verwenden werden rechts und Besetzung zu tun:

SELECT RIGHT('0000000000'+CAST(InvNo AS VARCHAR(10)),10)... 
+0

Während FORMAT groß ist, hat es Auswirkungen auf die Leistung und Ihre zweite Methode von RIGHT (... würde den anderen Vorschlag deutlich vorführen). – Matt

0

Die FORMAT Funktion ist nur in SQL Server 2012 verfügbar und vorwärts. Das wird für Sie in SQL Server 2008 R2 nicht funktionieren.

Ich denke, das Problem mit dem, was Sie versucht haben, ist, dass Sie führende Leerzeichen in invno haben. Befreien Sie sie mit LTRIM und alle nachfolgenden Leerzeichen können mit RTRIM entfernt werden. Dann, um Ihren Wert mit Nullen zu füllen, verketten Sie sie einfach auf der linken Seite und nehmen Sie dann die ganz rechte Anzahl von Zeichen, die Sie wollen. In Ihrem Fall 10. Wenn Sie absolut sicher sind, dass es sich bei den Werten, mit denen Sie zu tun haben, immer um eine bestimmte Anzahl von Zeichen handelt, können Sie nur die gewünschte Zahl hinzufügen. Die Methode, die ich hier gezeigt habe, wird jedoch unterschiedliche Längen des ursprünglichen Wertes berücksichtigen.

SELECT RIGHT('0000000000' + LTRIM(RTRIM(invno)), 10) as InvNo, invdte, '000'+item, brnkcomp, tqtyshp,price, bextpri, descrip 
FROM artran a 
LEFT JOIN arcust b ON a.custno = b.custno 
WHERE invdte BETWEEN DATEADD("d",-7,GETDATE()) and GETDATE() AND item IN 
    ('10120','1000290','30234','10491','10747','21449') 

Noel

Verwandte Themen