2016-05-01 8 views
-1

Ich habe eine SQL-Abfragegenerieren eindeutige Nummer

select substring(
      replace(
       replace(
        replace(
         replace(
          convert(varchar,sysdatetime(),121), 
         '-',''), 
        ' ',''), 
       ':',''), 
      '.','') 
     ,1,18) as DATETIME 

Es erzeugt 18 Stellen Aktuelle Anzahl wie 201605011221374719

Wie kann ich diese Abfrage ändern Eindeutige Zahlen generieren 11 Stellen?

+0

Mit welcher Version von SQL Server arbeiten Sie? –

+0

Sie sind sich bewusst, dass dies nicht unbedingt einzigartig ist, oder? Und was brauchst du - nur eine eindeutige Nummer, oder muss es etwas mit dem aktuellen Datum machen? – dean

Antwort

0

Ersetzen Sie einfach 18-11 in Abfrage:

select substring(replace(replace(replace(replace(convert(varchar,sysdatetime(),121),'-',''),' ',''),':',''),'.',''),1,11) as DATETIME 
+0

Ich möchte diese Abfrage auf 5 Computern gleichzeitig ausführen. also werde ich überhaupt nicht einzigartig sein. Ich muss Sekunden und Millisekunden hineinsetzen. Ich meine es wird so sein 05 (Monat) 01 (Tag) 12 (Stunde) 40 (Minuten) 30 (Sekunden) 2145 (MilliSeconds) ... Oder wir können die aktuelle Sekunde des Tages überprüfen ... ich meine es gibt 86400 in 24 Stunden kann ich aktuelle Sekunde aus dieser –

+0

wählen Sie bitte diese Frage, um es mehr Bedeutung voll und warum Sie brauchen 11 stellige eindeutige Nummer – TheGameiswar

0

ich eine right() Funktion um sysdatetime() hoffen kann erreichen, was Sie brauchen.

versuchen unter Abfrage

select substring(replace(replace(replace(replace(convert(varchar,right(sysdatetime(),18-5) 
,121),'-',''),' ',''),':',''),'.',''),1,18) as DATETIME 
+0

Ist es eine eindeutige Nummer ?? –

+0

@JaaZaib jedes Mal, wenn ich die Abfrage ausführen, bekomme ich eine eindeutige Nummer .. – Sachu

+0

Aber morgen zur gleichen Zeit wird es diese Nummer wieder generieren ??? –

0

NEWID() nicht für Sie arbeiten? Es ist einzigartig, aber hat mehr Ziffern als Ihre erforderlich 11.

Sie können NEWID() verwenden und dann nur die ersten 11 Ziffern nehmen (nicht sicher, ob dies genug für Sie einzigartig ist).

select right(cast(rand(checksum(newid())) as decimal(15, 15)), 11) 

https://msdn.microsoft.com/en-us/library/ms190348.aspx

+0

Danke. Ich habe jetzt eine Lösung –

+0

substring von newid() guid muss nicht immer eindeutig sein – Sachu

0

Wenn Sie mit SQL Server 2012 oder einer späteren Version arbeiten, können Sie die eingebaute in FORMAT Funktion:

--       123456789-12345678 
SELECT FORMAT(SYSDATETIME(), 'yyyyMMddHHmmssffff') -- 18 digits 
SELECT FORMAT(SYSDATETIME(), 'dHHmmssffff') -- 11 digits 

für frühere Versionen (2008 r2 und unten), können Sie einfach die Schätzwerte der Teilzeichenfolge ändern - erhalten Sie die Teilzeichenfolge vom 8. Zeichen:

Beachten Sie, dass Sie durch die Reduzierung der Anzahl der Ziffern auch die Eindeutigkeit der Zahlen reduzieren - während 18 Ziffern für die nächsten 10000 Jahre einzigartig sind, ist die 11 Ziffer nur 10 Tage einzigartig. Ändern auf 12 Ziffern wird es einzigartig pro Monat machen, und die Änderung auf 14 Ziffern wird es einzigartig pro Jahr machen.

Verwandte Themen