Konvertieren Sie ein Datum in das Format JJJJMTTT

7

Welcher SQL-Befehl wird empfohlen, um ein Datum in ein yyyymmddFormat 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. (zB [ 20130705] - beachte die beiden Leerzeichen nach dem Wert 20130705)

Wird empfohlen, die erste SQL-Anweisung zu verwenden?

Jack
quelle
Kein direkter Verweis auf Ihre Frage msdn.microsoft.com/en-us/library/ms176089.aspx
bummi
2
Ich würde empfehlen, immer explizit eine Länge für a anzugeben varchar. An verschiedenen Stellen erhalten Sie unterschiedliche Standardlängen. Als Parameter für eine Prozedur erhalten Sie eine Standardlänge von 1 Zeichen - normalerweise nicht das, was Sie erwarten.
marc_s

Antworten:

16

Wenn in varD keine Länge für varchar angegeben ist, wird standardmäßig, wie in MSDN dokumentiert , 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 DATALENGTH()Funktion in beiden Fällen 8 zurückgibt.

Raj

Raj
quelle