Muszę przekonwertować int datafield na nvarchar z wiodącymi zerami
przykład:
1 zamień na '001'
867 konwertuj na '000867' itd.
dzięki.
To moja odpowiedź 4 godziny później ...
Przetestowałem ten skrypt T-SQL i dla mnie działa dobrze!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
Stworzyłem tę funkcję użytkownika
Kod T-SQL:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Przykład:
WYBIERZ dbo.CIntToChar (867, 6) jako COD_ID
WYNIK
000867
sql-server
stored-procedures
RicardoBalda
źródło
źródło
Odpowiedzi:
Spróbuj tego:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Otrzyma wynik w postaci 5 cyfr, np. 00001, ...., 01234
źródło
select right('00000' || cast(Your_Field as varchar(5)), 5)
Możesz również użyć funkcji FORMAT () wprowadzonej w SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
źródło
Użyj,
REPLICATE
aby nie trzeba było na stałe kodować wszystkich wiodących zer:WYNIK:
źródło
Nie do High-Jacka na to pytanie, ale należy zauważyć, że należy użyć typu danych (N) VARCHAR zamiast (N) CHAR.
Powyższy segment nie wygeneruje poprawnej odpowiedzi z SQL 2005
Powyższy segment wygeneruje żądaną odpowiedź z SQL 2005
Varchar zapewni Ci żądaną długość prefiksu w locie. Gdzie jako typ danych o stałej długości będzie wymagał oznaczenia długości i dostosowań.
źródło
Lubię używać
to daje mi
źródło
RIGHT(1000+Number, 3)
- ładne, krótkie i szybkieTyp danych „int” nie może zawierać więcej niż 10 cyfr, dodatkowo funkcja „Len ()” działa na liczbach całkowitych, więc nie ma potrzeby konwertowania int na łańcuch przed wywołaniem funkcji len ().
Wreszcie, nie bierzesz pod uwagę przypadku, w którym rozmiar int> całkowita liczba cyfr, do których chcesz go dopełnić (@intLen).
Dlatego bardziej zwięzłym / poprawnym rozwiązaniem jest:
źródło
Niezbyt eleganckie, ale dodaję ustawioną wartość z taką samą liczbą wiodących zer, które chcę, do liczby, którą chcę przekonwertować, i używam funkcji PRAWO.
Przykład:
źródło
Rozwiązanie jednoprzewodowe ( per se ) dla SQL Server 2008 lub nowszego:
Mnożenie przez
SIGN
wyrażenie jest równoważneMAX(0, @DesiredLenght-LEN([Column]))
. Problem w tym, żeMAX()
akceptuje tylko jeden argument ...źródło
Znalazłem dobry artykuł tutaj :
źródło
BTW jeśli jest to kolumna int to nadal nie zachowa zer Po prostu zrób to w warstwie prezentacji lub jeśli naprawdę potrzebujesz w SELECT
źródło
Miałem ten sam problem, oto jak rozwiązałem ... Prosty i elegancki. „4” to długość łańcucha, bez względu na to, jaka liczba całkowita zostanie przekazana, będzie wypełniona od zera do „4”.
źródło
W moim przypadku chciałem, aby moje pole miało wiodące 0 w polu 10 znaków (NVARCHAR (10)). Plik źródłowy nie ma wiodących zer, które należy dołączyć do innej tabeli. Czy to po prostu dzięki korzystaniu z programu SQL Server 2008R2:
Ustaw Pole = right (('0000000000' + [Pole]), 10) (Nie można użyć formatu (), ponieważ jest to wersja sprzed SQL2012)
Wykonano to na istniejących danych. W ten sposób 1 lub 987654321 nadal wypełni wszystkie 10 spacji wiodącymi zerami.
Ponieważ nowe dane są importowane, a następnie zrzucane do tabeli za pośrednictwem bazy danych programu Access, mogę użyć formatu ([pole], „0000000000”) podczas dołączania z programu Access do tabeli serwera SQL dla wszelkich nowych rekordów.
źródło
- Bez „RTRIM” zwracana wartość to
3__
!!!- Bez „RTRIM” zwracana wartość to
867___
!!!źródło
Używanie
RIGHT
jest dobrą opcją, ale możesz też wykonać następujące czynności:gdzie
N
jest łączną liczbą cyfr, które chcesz wyświetlić. A więc dla 3-cyfrowej wartości z wiodącymi zerami (N = 3
):lub na przemian
To, co robi, to dodanie żądanej wartości do potęgi 10 wystarczająco dużej, aby wygenerować wystarczającą liczbę zer wiodących, a następnie odcięcie wiodącej 1.
Zaletą tej techniki jest to, że wynik będzie zawsze tej samej długości, co pozwala na użycie
SUBSTRING
zamiastRIGHT
, co nie jest dostępne w niektórych językach zapytań (takich jak HQL).źródło
Ta praca dla mnie w MYSQL:
Na przykład:
Mam nadzieję, że to pomoże. Z poważaniem
źródło
Działa w SQLServer
Cieszyć się
źródło
Zastanawiałem się, czy to ci się przyda?
źródło