2016-09-14 1 views
-2

Ich habe ein varchar Feld, das Zahlen in diesem Format "00001", "00002" usw. enthält. Wenn ich versuche, die nächste Nummer mit Max (Feld) + 1 zu bekommen, bekomme ich eine ganze Zahl "3" zum Beispiel.Holen Sie Max + 1, ohne Nullen zu entfernen

Wie bekomme ich das Ergebnis "00003" statt "3"?

Hier ist ein funktionierendes Beispiel ich habe es nur herausfinden, aber ich denke, dass es muss ein einfacher Weg sein:

SELECT TOP (1) 
    { fn REPEAT(0, LEN(ItemId) - LEN(MAX(ItemId) + 1)) } + 
         CAST(MAX(ItemId) + 1 AS varchar(7)) AS Expr1 
FROM Items 
GROUP BY ItemId 
ORDER BY ItemId DESC 

Die letzte Abfrage gibt das korrekte Ergebnis „0004916“

+2

Der wirkliche Test ist, was sollten Sie für '00009',' 00010' oder '000010'? – dasblinkenlight

+0

Mögliches Duplikat von [Formatieren von Zahlen durch Auffüllen mit führenden Nullen in SQL Server] (http://stackoverflow.com/questions/9520661/formatting-numbers-by-padding-with-leading-zeros-in-sql-server) – qxg

Antwort

1

Um das zu tun Sie müssen sie in eine Ganzzahl konvertieren, inkrementieren und in eine Zeichenfolge zurückkonvertieren:

WAHL RECHTS ('00000' + KONVERTIERUNG (VARCHAR, MAX (KONVERT (INT, Feld)) + 1), 5) FROM MyTable

Aber ... Sie sind viel besser dran mit einem IDENTITY-Feld, das Integer ist und SQL die Inkrementierung verarbeiten lässt, dann konvertiert es in eine führende Null-Zeichenfolge, wenn Sie es brauchen. Eine Möglichkeit, dies zu tun ist zu verwenden eine Computed Säule:

CREATE TABLE [dbo].[MyTable](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Field] AS (RIGHT('00000'+CONVERT([VARCHAR],[Id],(0)),(5))), 
    [Desc] [nchar](10) NOT NULL 
) ON [PRIMARY] 
GO 

diese Weise die „neueste Wert“ wird für Sie erstellt werden, wenn Sie eine Zeile einzufügen, und die führende Null Stachel automatisch erstellt werden versionwill.

0

prüfen unten Beispiel kann es Ihnen helfen:

DECLARE @tbl1 AS TABLE 
(
    ComputerName VARCHAR(5), 
    CodeNumber INT 
) 

INSERT INTO @tbl1 VALUES('0001',221) 
INSERT INTO @tbl1 VALUES('0002',221) 
INSERT INTO @tbl1 VALUES('0003',221) 

SELECT 
    REPLICATE 
    (
     '0', 
     4-LEN(MAX(CAST(ComputerName as INT))) 
    ) + 
    CAST(MAX(CAST(ComputerName as INT))+1 AS VARCHAR(5)) 
FROM @tbl1 
GROUP BY CodeNumber 
Verwandte Themen