Mam następującą tabelę A:
id
----
1
2
12
123
1234
Muszę uzupełnić id
wartości z lewej strony zerami:
id
----
0001
0002
0012
0123
1234
Jak mogę to osiągnąć?
Myślę, że to może być to, czego szukasz:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
lub
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Nie testowałem składni w drugim przykładzie. Nie jestem pewien, czy to działa w 100% - może wymagać pewnych poprawek - ale przekazuje ogólną ideę, jak uzyskać pożądany wynik.
EDYTOWAĆ
Aby rozwiązać problemy wymienione w komentarzach ...
@ pkr298 - Tak STR działa tylko na liczbach ... Pole OP to ID ... stąd tylko liczba.
@Desolator - Oczywiście to nie zadziała ... Pierwszy parametr ma 6 znaków. Możesz zrobić coś takiego:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
teoretycznie powinno to przesunąć słupki bramki ... ponieważ liczba rośnie, ZAWSZE powinno działać ... niezależnie od tego, czy jest 1 czy 123456789 ...
Więc jeśli twoja maksymalna wartość to 123456 ... zobaczysz 0000123456, a jeśli twoja minimalna wartość to 1, zobaczysz 0000000001
STR(123456, 4)
powróci****
SQL Server obsługuje teraz funkcję FORMAT począwszy od wersji 2012, więc:
da rade.
Jeśli Twój identyfikator lub kolumna jest w a
varchar
i przedstawia liczbę, którą najpierw przekonwertujesz:źródło
Wynik
źródło
Stary post, ale może to komuś pomoże:
Aby zakończyć, dopóki nie skończy się 4 niepustymi znakami:
Aby ukończyć do 10:
Jeśli kolumna jest numeryczna , najpierw przekonwertuj ją na varchar z takim kodem:
Aby uzupełnić do 10 z polem numerycznym:
źródło
Spróbuj tego:
źródło
- Proszę spojrzeć na to.
- Mam nadzieję, że ci pomogą
źródło
Działa to w przypadku łańcuchów, liczb całkowitych i liczb:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Gdzie
4
jest pożądana długość. Działa dla liczb z więcej niż 4 cyframi, zwraca pusty ciąg dlaNULL
wartości.źródło
Jeśli ktoś nadal jest zainteresowany, znalazłem ten artykuł na DATABASE.GUIDE:
Left Padding in SQL Server - 3 LPAD () Equivalents
Krótko mówiąc, w tym artykule wymieniono 3 metody.
Powiedzmy, że Twój identyfikator = 12 i chcesz, aby był wyświetlany jako 0012.
Metoda 1 - użycie funkcji RIGHT ()
Pierwsza metoda używa funkcji RIGHT () do zwrócenia tylko prawej części ciągu, po dodaniu kilku wiodących zer.
SELECT RIGHT('00' + '12', 4);
Wynik:
0012
Metoda 2 - użyj kombinacji RIGHT () i REPLICATE ()
Ta metoda jest prawie taka sama jak poprzednia, z tą różnicą, że po prostu zastępuję trzy zera funkcją REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Wynik:
0012
Metoda 3 - Użyj kombinacji REPLACE () i STR ()
Ta metoda pochodzi z zupełnie innego punktu widzenia niż poprzednie metody:
SELECT REPLACE(STR('12', 4),' ','0');
Wynik:
0012
Sprawdź artykuł, jest bardziej dogłębna analiza z przykładami.
źródło
To jest to, czego zwykle używam, gdy potrzebuję uzupełnić wartość.
źródło
Potrzebowałem tego w funkcji na serwerze SQL i poprawiłem nieco odpowiedź Patryka.
źródło
Utwórz funkcję:
Przykład:
źródło
SELECT @var = LTRIM(RTRIM(@Text))
Stworzyłem funkcję:
Użyj: wybierz dbo.fnPadLeft (123, 10)
Zwroty: 0000000123
źródło
Coś całkiem zgodnego z ODBC w razie potrzeby może wyglądać następująco:
Wynika to z faktu, że liczbę cyfr dla liczby o podstawie 10 można znaleźć przez integralną składową jej dziennika. Z tego możemy odjąć go od żądanej szerokości wypełnienia. Powtórzenie zwróci
null
wartości poniżej 1, więc potrzebujemyifnull
.źródło
Moje rozwiązanie nie jest wydajne, ale pomogło mi w sytuacji, gdy wartości (numery czeków bankowych i nr ref. Przelewu) były przechowywane jako varchar, gdzie niektóre wpisy miały wartości alfanumeryczne i musiałem dopełniać, jeśli długość jest mniejsza niż 6 znaków.
Pomyśl o udostępnieniu, jeśli ktoś znajdzie się w tej samej sytuacji
źródło
Prostym przykładem może być
źródło
Stworzyłem w tym celu funkcję, w której możesz określić żądaną długość znaków wyjściowych:
Przykładowe wyniki
źródło
Bardziej wydajnym sposobem jest:
źródło