2009-04-22 10 views

Odpowiedz

23

To jest dość dużo droga: Adding Leading Zeros To Integer Values

Tak, aby zapisać następujący link, kwerenda wygląda następująco, gdzie #Numbers jest stół i Num jest kolumna:

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

za negatywne lub wartości dodatnie

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

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

Co z liczbami ujemnymi? – MatBailie

+1

Spowoduje to wygenerowanie wyjątku z liczbą z powodu konwersji, potrzebujesz obsady –

+0

Dodałem kod, który zrobi wartości ujemne lub dodatnie – SQLMenace

0

Zrobiłbym to w ten sposób.

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

Niekoniecznie wszystko to "łatwiejsze" lub bardziej wydajne, ale lepsze do czytania. Może być zoptymalizowane, aby usunąć potrzebę „prawo”

2

Jeśli możesz sobie pozwolić/chcą mieć funkcję w swojej bazie danych można użyć coś takiego:

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

Innym sposobem (bez CAST lub CONVERT):

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

w sysbase t-sql byłoby dobrze (str_replace (...)) zamiast – knb

+0

Doskonałe rozwiązanie –

0

Jeśli chcesz uzyskać spójny całkowitą liczbę ciągów w wyniku ostatecznego dodając inną liczbę zer, tutaj jest trochę modyfikacja bit (dla vsql)

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

Możesz zamienić 9 dowolną liczbą dla swoich potrzeb!

BRD

Powiązane problemy