Ich muss int datafield in nvarchar mit führenden Nullen konvertieren
Beispiel:
1 konvertiere zu '001'
867 konvertieren zu '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
sql-server
stored-procedures
RicardoBalda
quelle
quelle
Antworten:
Versuche dies:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Das Ergebnis wird in 5 Ziffern angezeigt, z. B. 00001, ...., 01234
quelle
select right('00000' || cast(Your_Field as varchar(5)), 5)
Sie können auch die in SQL Server 2012 eingeführte Funktion FORMAT () verwenden . http://technet.microsoft.com/library/hh213505.aspx
quelle
Verwenden
REPLICATE
Sie diese Option, damit Sie nicht alle führenden Nullen fest codieren müssen:AUSGABE:
quelle
Nicht um diese Frage zu beantworten, sondern es muss beachtet werden, dass Sie (N) VARCHAR anstelle des Datentyps (N) CHAR verwenden müssen.
Über dem Segment wird nicht die richtige Antwort von SQL 2005 erzeugt
Über dem Segment wird die gewünschte Antwort von SQL 2005 erzeugt
Mit dem Varchar erhalten Sie im Handumdrehen die gewünschte Präfixlänge. Wobei der Datentyp mit fester Länge eine Längenbezeichnung und Anpassungen erfordert.
quelle
Ich benutze gerne
das gibt mir
quelle
RIGHT(1000+Number, 3)
- schön, kurz und schnellDer Datentyp "int" darf nicht länger als 10 Stellen sein. Außerdem funktioniert die Funktion "Len ()" für Ints, sodass das int nicht in einen String konvertiert werden muss, 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 ist, auf die es aufgefüllt werden soll (@intLen).
Daher ist eine präzisere / korrektere Lösung:
quelle
Nicht sehr elegant, aber ich addiere einen festgelegten Wert mit der gleichen Anzahl führender Nullen, die ich möchte, zu der Zahl, die ich konvertieren möchte, und verwende die RECHTS-Funktion.
Beispiel:
quelle
Einzeilige Lösung ( per se ) für SQL Server 2008 oder höher:
Die Multiplikation mit dem
SIGN
Ausdruck entsprichtMAX(0, @DesiredLenght-LEN([Column]))
. Das Problem ist, dassMAX()
nur ein Argument akzeptiert wird ...quelle
Ich habe hier einen guten Artikel gefunden :
quelle
Übrigens, wenn es sich um eine int-Spalte handelt, werden die Nullen immer noch nicht beibehalten. Tun Sie dies einfach in der Präsentationsebene oder wenn Sie dies wirklich in SELECT benötigen
quelle
Hatte das gleiche Problem, so habe ich es 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, wird sie mit Nullen bis zu "4" aufgefüllt.
quelle
In meinem Fall wollte ich, dass mein Feld führende Nullen in einem 10-Zeichen-Feld hat (NVARCHAR (10)). Die Quelldatei enthält nicht die führenden Nullen, die für die Verknüpfung mit einer anderen Tabelle erforderlich sind. Dies geschah einfach aufgrund von SQL Server 2008R2:
Set Field = right (('0000000000' + [Field]), 10) (Format () kann nicht verwendet werden, da dies vor SQL2012 ist)
Dies wurde für die vorhandenen Daten durchgeführt. Auf diese Weise füllt 1 oder 987654321 immer noch alle 10 Felder mit führenden Nullen.
Da die neuen Daten importiert und dann über eine Access-Datenbank in die Tabelle kopiert werden, kann ich das Format ([Feld], "0000000000") verwenden, wenn neue Datensätze von Access an die SQL Server-Tabelle angehängt werden.
quelle
- Ohne 'RTRIM' ist der zurückgegebene Wert
3__
!!!- Ohne 'RTRIM' ist der zurückgegebene Wert
867___
!!!quelle
Die Verwendung
RIGHT
ist eine gute Option, Sie können jedoch auch Folgendes tun:Wo
N
ist die Gesamtzahl der Stellen, die angezeigt werden sollen? Also für einen dreistelligen Wert mit führenden Nullen (N = 3
):oder alternativ
Dies führt dazu, dass der gewünschte Wert zu einer Potenz von 10 addiert wird, die groß genug ist, um genügend führende Nullen zu erzeugen, und dann die führende 1 abgeschnitten wird.
Der Vorteil dieser Technik besteht darin, dass das Ergebnis immer dieselbe Länge hat und die Verwendung von
SUBSTRING
anstelle von ermöglichtRIGHT
, was in einigen Abfragesprachen (wie HQL) nicht verfügbar ist.quelle
Diese Arbeit für mich in MYSQL:
Beispielsweise:
Hoffe das wird helfen. Freundliche Grüße
quelle
Funktioniert in SQLServer
Genießen
quelle
Ich habe mich gefragt, ob dies für Sie von Nutzen ist.
quelle