2009-04-22 16 views

risposta

23

Questo è più o meno il modo: Adding Leading Zeros To Integer Values

Quindi, per salvare seguendo il link, la query simile a questa, dove #Numbers è il tavolo e Num è la colonna:

SELECT RIGHT('000000000' + CONVERT(VARCHAR(8),Num), 8) FROM #Numbers 

per negativo o valori positivi

declare @v varchar(6) 
select @v = -5 

SELECT case when @v < 0 
then '-' else '' end + RIGHT('00000' + replace(@v,'-',''), 5) 
+0

E i numeri negativi? – MatBailie

+1

Questo genererà un'eccezione con un numero dovuto alle conversioni, è necessario il cast –

+0

Ho aggiunto del codice che farà valori positivi o negativi – SQLMenace

0

Farei così.

SELECT RIGHT(REPLICATE('0', 5) + CAST(Field2 AS VARCHAR(5),5) 

Non necessariamente tutto ciò che è "Più facile" o più efficiente, ma migliore da leggere. Potrebbe essere ottimizzato per eliminare la necessità di "DESTRA"

2

Se potete permettervi/vuole avere una funzione nel database si potrebbe usare qualcosa come:

CREATE FUNCTION LEFTPAD 
      (@SourceString VARCHAR(MAX), 
      @FinalLength INT, 
      @PadChar  CHAR(1)) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    RETURN 
    (SELECT Replicate(@PadChar, @FinalLength - Len(@SourceString)) + @SourceString) 
END 
6

Un altro modo (senza CAST o CONVERT):

SELECT RIGHT(REPLACE(STR(@NUM),' ','0'),5) 
+0

in sysbase t-sql sarebbe giusto (str_replace (...)) invece – knb

+0

Ottima soluzione –

0

Se si desidera ottenere un consistente numero di stringhe totali nel risultato finale con l'aggiunta di un diverso numero di zeri, ecco un po 'di modifica bit (per VSQL)

SELEZIONA CONCAT (REPEAT ('0', 9-length (TO_CHAR (var1))), CAST (var1 AS VARCHAR (9))) var1

È possibile sostituire 9 con qualsiasi numero per le proprie esigenze!

BRD

Problemi correlati