2016-04-18 5 views
3

Ich versuche den nächsten Wert von diesem zu erhalten, eingereicht SU - 1 /2016Erster nächster Wert von Sequenz SQL

Abfrage I

verwendet
SELECT RIGHT('000' + CAST(ISNULL(MAX(SUBSTRING(InvoiceNO,4, 1)), 0) + 1 AS VARCHAR(4)), 4) 
from [dbo].[Invoice] 

Die Abfrage Ausgang ist 0001, soll es 0002 sein.

Antwort

3

Sie teilen diesen Wert SU - 1 /2016 von der 4. Position, die Ihnen "-" gibt. Um also die 1 zu bekommen, müssen Sie von der 6. Position aus starten, was Ihnen die erwartete Leistung gibt.

SELECT 
RIGHT('000' + CAST(ISNULL(MAX(SUBSTRING(InvoiceNO,6, 1)), 0) + 1 AS VARCHAR(4)), 4) 
from [dbo].[Invoice] 
+0

Dank sir für die Hilfe – Ayman

1

Verwenden Sie diesen Code.

SELECT RIGHT('000' + CAST((ISNULL(MAX(SUBSTRING(exampleColumn,6, 1)), 0) + 1) AS VARCHAR(4)), 4) 
from [dbo].tblExample 

Sie nehmen ein Zeichen aus der 4. Position, aber Ihre Daten „1“ in der 6. Position.

1

Wenn ich Sie richtig verstanden habe, verwenden Sie die substring Funktion auf SU - 1 /2016. Sie nehmen einen Teilstring von der 4. Position mit einer Länge von 1 (erinnern Sie sich substring ist 1 basiert, nicht 0). So erhalten Sie -. Wenn Sie versuchen:

SELECT '-' + 1 

Gibt: 1. Sie müssen wahrscheinlich an Position ‚substringing‘ starten 6.

1

Sie Ihr Skript kürzer etwas machen kann, und verwenden Sie stattdessen:

SELECT RIGHT(MAX(SUBSTRING(InvoiceNO,6, 1)) + 10001, 4) 
-- Including this for test: 
FROM (values('SU - 1 /2016')) x(InvoiceNO) 
+0

SELECT RIGHT (MAX (SUBSTRING (InvoiceNO, 6, 1)) + 10001, 4) - Einschließlich dies für den Test: FROM (Werte ('SU - 0002/2016')) x (InvoiceNO) gegeben anderen Ausgang –

+0

@MukeshKalgude Ich versuchte, ich bekomme die gleiche Ausgabe wie die anderen Antworten. Kannst du genauer sein ? –