Ich muss int datafield in nvarchar mit führenden Nullen konvertieren
beispiel:
1 konvertiere zu '001'
867 konvertieren in '000867' usw.
vielen Dank.
Dies ist meine Antwort 4 Stunden später ...
Ich habe dieses T-SQL-Skript getestet und arbeite gut für mich!
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
Ich habe diese Benutzerfunktion erstellt
T-SQL-Code:
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
Beispiel:
SELECT dbo.CIntToChar (867, 6) AS COD_ID
AUSGABE
000867
Versuchen Sie folgendes: select right('00000' + cast(Your_Field as varchar(5)), 5)
Das Ergebnis wird in 5 Ziffern angezeigt, z. B. 00001, ...., 01234
Sie können auch die Funktion FORMAT () verwenden, die in SQL Server 2012 . http://technet.Microsoft.com/library/hh213505.aspx eingeführt wurde.
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT FORMAT(@number1, 'd10')
SELECT FORMAT(@number2, 'd10')
Verwenden Sie REPLICATE
, damit Sie nicht alle führenden Nullen hart codieren müssen:
DECLARE @InputStr int
,@Size int
SELECT @InputStr=123
,@Size=10
PRINT REPLICATE('0',@Size-LEN(RTRIM(CONVERT(varchar(8000),@InputStr)))) + CONVERT(varchar(8000),@InputStr)
AUSGABE:
0000000123
Nicht zu hoch diese Frage, aber der Hinweis muss gemacht werden, dass Sie (N) VARCHAR anstelle von (N) CHAR-Datentyp verwenden müssen.
RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 )
Das obige Segment liefert nicht die korrekte Antwort von SQL 2005
RIGHT('000' + CAST(@number1 AS NVARCHAR(3)), 3 )
Im obigen Segment wird die gewünschte Antwort von SQL 2005 erzeugt
Der varchar gibt Ihnen die gewünschte Präfixlänge im laufenden Betrieb an, wobei der Datentyp mit fester Länge eine Längenangabe und -anpassung erfordert.
Der Datentyp "int" darf nicht mehr als 10 Stellen haben, außerdem funktioniert die Funktion "Len ()" für ints. Daher muss das int nicht in einen String konvertiert werden, bevor die Funktion len () aufgerufen wird.
Schließlich berücksichtigen Sie nicht den Fall, in dem die Größe Ihres Int> die Gesamtzahl der Stellen, zu denen es aufgefüllt werden soll (@intLen), berücksichtigt wird.
Eine präzisere/korrekte Lösung ist daher:
CREATE FUNCTION rf_f_CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(10)
AS
BEGIN
IF @intlen > 20 SET @intlen = 20
IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(nvarchar(10), @intVal), @intlen)
RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(nvarchar(10), @intVal)
END
Ich benutze gerne
DECLARE @Length int
DECLARE @Number int
SET @Length = 9
SET @Number = 4
select right( POWER(10, @Length) + @Number, @Length)
das gibt mir
000000004
Nicht sehr elegant, aber ich füge einen Wert mit der gleichen Anzahl von führenden Nullen, die ich möchte, zu der Zahl hinzu, die ich konvertieren möchte, und verwende die RECHTS-Funktion.
Beispiel:
SELECT RIGHT(CONVERT(CHAR(7),1000000 + @number2),6)
Ergebnis: '000867'
Einzeilige Lösung ( per se ) für SQL Server 2008 oder höher:
DECLARE @DesiredLenght INT = 20;
SELECT
CONCAT(
REPLICATE(
'0',
(@DesiredLenght-LEN([Column])) * (1+SIGN(@DesiredLenght-LEN([Column])) / 2) ),
[Column])
FROM Table;
Multiplikation mit SIGN
Ausdruck entspricht MAX(0, @DesiredLenght-LEN([Column]))
. Das Problem ist, dass MAX()
nur ein Argument akzeptiert ...
select right('000' + convert(varchar(3),id),3) from table
example
declare @i int
select @i =1
select right('000' + convert(varchar(3),@i),3)
Übrigens, wenn es sich um eine int-Spalte handelt, werden die Nullen nicht beibehalten Machen Sie es einfach in der Präsentationsschicht oder wenn Sie wirklich in der
In meinem Fall wollte ich, dass mein Feld führende Nullen in 10-Zeichen-Feldern (NVARCHAR (10)) ..__ hat. Die Quelldatei hat nicht die führenden 0en, die benötigt werden, um dann in eine andere Tabelle aufgenommen zu werden auf SQL Server 2008R2 sein:
Set Field = right (('0000000000' + [Field]), 10) (Format () kann nicht verwendet werden, da dies vor SQL2012 ist)
Dies wurde anhand der vorhandenen Daten durchgeführt. Auf diese Weise füllt 1 oder 987654321 weiterhin alle 10 Leerzeichen mit führenden Nullen.
Da die neuen Daten importiert und dann über eine Access-Datenbank in die Tabelle gespeichert werden, kann ich beim Anhängen von Access an die SQL Server-Tabelle für neue Datensätze Format ([Feld], "0000000000") verwenden.
Ich habe einen guten Artikel gefunden hier :
Eine Zeichenfolge mit führenden Nullen auffüllen
Ich muss das oft tun bei der Ausgabe von Daten mit fester Länge Exportiere beispielsweise eine numerische Spalte ist 9 Zeichen lang und Sie müssen mit führenden 0 vorangestellt werden.
Hatte dasselbe Problem, so habe ich gelöst ... Einfach und elegant. Die "4" gibt an, wie lang die Zeichenfolge sein soll. Unabhängig davon, welche Länge der Ganzzahl übergeben wird, füllt sie mit Nullen bis "4".
STUFF(SomeVariableOrField,1,0,REPLICATE('0',4 - LEN(SomeVariableOrField)))
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
- Ohne 'RTRIM' lautet der zurückgegebene Wert 3__
!!!
SELECT RIGHT('000' + RTRIM(CAST(@number1 AS NCHAR(3)), 3 )) AS NUMBER_CONVERTED
- Ohne 'RTRIM' lautet der zurückgegebene Wert 867___
!!!
SELECT RIGHT('000000' + RTRIM(CAST(@number2 AS NCHAR(6)), 6 )) AS NUMBER_CONVERTED
Diese Arbeit für mich in MySQL:
FUNCTION leadingZero(format VARCHAR(255), num VARCHAR(255))
RETURNS varchar(255) CHARSET utf8
BEGIN
return CONCAT(SUBSTRING(format,1,LENGTH(format)-LENGTH(num)),num);
END
Zum Beispiel:
leadingZero('000',999); returns '999'
leadingZero('0000',999); returns '0999'
leadingZero('xxxx',999); returns 'x999'
Ich hoffe, das wird helfen
Die Verwendung von RIGHT
ist eine gute Option, Sie können jedoch auch Folgendes tun:
SUBSTRING(CAST((POWER(10, N) + value) AS NVARCHAR(N + 1)), 2, N)
dabei ist N
die Gesamtzahl der Ziffern, die angezeigt werden sollen. Also für einen 3-stelligen Wert mit führenden Nullen (N = 3
):
SUBSTRING(CAST((POWER(10, 3) + value) AS NVARCHAR(4)), 2, 3)
oder abwechselnd
SUBSTRING(CAST(1000 + value) AS NVARCHAR(4)), 2, 3)
Dazu wird der gewünschte Wert zu einer Potenz von 10 addiert, die groß genug ist, um genügend führende Nullen zu erzeugen, und dann die führende 1 abgeschnitten.
Der Vorteil dieser Technik ist, dass das Ergebnis immer die gleiche Länge hat, sodass SUBSTRING
anstelle von RIGHT
verwendet werden kann, was in einigen Abfragesprachen (z. B. HQL) nicht verfügbar ist.