it-swarm.com.de

Konvertieren Sie ein Datum in das Format JJJJMTTT

Welcher SQL-Befehl wird empfohlen, um ein Datum in das Format yyyymmdd zu konvertieren?

  1. convert(varchar(8), getdate(), 112); oder
  2. convert(varchar, getdate(), 112)

Ich stelle fest, dass bei Verwendung des zweiten zwei Leerzeichen nach dem Datum angehängt werden. (z.B. [20130705] - Beachten Sie die beiden Leerzeichen nach dem Wert 20130705)

Wird empfohlen, die erste SQL-Anweisung zu verwenden?

7
Jack

Standardmäßig als in MSDN dokumentiert , wenn für varchar keine Länge angegeben ist, wird bei Verwendung von CAST oder CONVERT standardmäßig 30 und bei Deklaration als Variable standardmäßig 1 verwendet.

Versuchen Sie Folgendes, um dies zu demonstrieren:

DECLARE @WithLength varchar(3),@WithoutLength varchar;
SET @WithLength = '123';
SET @WithoutLength = '123';

SELECT @WithLength,@WithoutLength

Dies ist sehr gefährlich, da SQL Server den Wert ohne Warnung leise abschneidet und zu unerwarteten Fehlern führen kann.

Wenn Sie jedoch in dem gegebenen Szenario mit oder ohne Länge zu dem betreffenden Thema kommen, macht dies keinen Unterschied zwischen den beiden Aussagen, und ich kann die beiden nachfolgenden Leerzeichen, über die Sie sprechen, nicht sehen. Versuche dies:

SELECT CONVERT(varchar(8), GETDATE(), 112) 
UNION ALL 
SELECT DATALENGTH(CONVERT(varchar(8), GETDATE(), 112)) 
UNION ALL 
SELECT CONVERT(varchar, GETDATE(), 112)
UNION ALL
SELECT DATALENGTH(CONVERT(varchar, GETDATE(), 112))

Sie werden feststellen, dass die Funktion DATALENGTH() in beiden Fällen 8 zurückgibt.

Raj

16
Raj