2017-11-01 3 views
0

Beim Versuch, ein Datetime-Feld zu konvertieren, um NULL loszuwerden, bekomme ich den Fehler, dass die Datetime nicht konvertiert werden kann.Geplantes Datum/Uhrzeit-Konvertierungsfehler (SQL)

Diese Abfrage füllt eine andere Datenbank, in der der Spaltentyp Datentyp ist.

Dieser Job läuft einwandfrei, wenn er nicht geplant ist, führt aber während des geplanten Einfügejobs zu einem Fehler.

Irgendwelche Ideen?

, (SELECT 
     CASE 
      WHEN MIN([Discount Ledger].[Posting Date]) IS NOT NULL 
      THEN CONVERT(VARCHAR(50), MIN([Discount Ledger].[Posting Date]), 121) 
      ELSE '-' 
     END 
    FROM 
     [Wings$Discount Ledger Entry] AS "Discount Ledger" 
    LEFT JOIN 
     [Wings$Periodic Discount] AS "MixMatchHeader" ON [Discount Ledger].[Offer No_] = [MixMatchHeader].[No_] 
    LEFT JOIN 
     [Wings$Periodic Discount Line] AS "MixMatch" ON [MixMatchHeader].[No_] = [MixMatch].[Offer No_] 
    LEFT JOIN 
     [Wings$Item_Special Group Link] AS "Special Group" ON [MixMatch].[No_] = [Special Group].[Special Group Code] 
    LEFT JOIN 
     [Wings$Store Price Group] AS "Store Price Group" ON [MixMatch].[Price Group] = [Store Price Group].[Price Group Code] 
    WHERE 
     [MixMatch].[No_] = [Item Ledger].[Item No_] 
     AND [MixMatch].[Variant Code] = [Item Ledger].[Variant Code] 
     AND [Store Price Group].[Store] = [Item Ledger].[Location Code]) AS "Discount Start Date" 

Antwort

0

Sie können dies mit ISNULL tun. Da Sie nach dem MIN Datum suchen, verwende ich GETDATE() als Argument/Ersatzwert für NULL. Sofern Ihre Daten keine zukünftigen Daten enthalten, sollte GETDATE() als MAX-Wert fungieren. Es sei denn, Sie möchten die CASE Anweisung die NULL Werte als MIN bewerten. In diesem Fall können Sie eine leere Zeichenfolge '' oder '1900-01-01' anstelle von GETDATE() verwenden.

, (SELECT 
CASE 
WHEN 
MIN([Discount Ledger].[Posting Date]) IS NOT NULL 
THEN CONVERT(varchar(50),MIN(ISNULL([Discount Ledger].[Posting Date],GETDATE())),121) 
ELSE '-' 
END 
FROM [Wings$Discount Ledger Entry] AS "Discount Ledger" 
LEFT JOIN [Wings$Periodic Discount] AS "MixMatchHeader" ON [Discount Ledger].[Offer No_] = [MixMatchHeader].[No_] 
LEFT JOIN [Wings$Periodic Discount Line] AS "MixMatch" ON [MixMatchHeader].[No_] = [MixMatch].[Offer No_] 
LEFT JOIN [Wings$Item_Special Group Link] AS "Special Group" ON [MixMatch].[No_] = [Special Group].[Special Group Code] 
LEFT JOIN [Wings$Store Price Group] AS "Store Price Group" ON [MixMatch].[Price Group] = [Store Price Group].[Price Group Code] 
WHERE [MixMatch].[No_] = [Item Ledger].[Item No_] AND [MixMatch].[Variant Code] = [Item Ledger].[Variant Code] AND [Store Price Group].[Store] = [Item Ledger].[Location Code]) 
AS "Discount Start Date" 
+0

Hallo Jacob, Danke für die Antwort. Mein Ziel ist es, den NULL oder '1900-01-01' loszuwerden. Wenn das Datum leer ist, möchte ich ein '-' oder sagen 'NONE' anzeigen, aber es ergibt sich ein Wert außerhalb des Bereichs. Irgendwelche anderen Vorschläge? –

+0

Angezeigte Werte werden oft im Frontend behandelt. Ist dies für einen Bericht oder Export zu Excel oder Ähnlichem? –

+0

Im Dumping Ergebnisse bilden diese Abfrage in eine andere SQL-Datenbank und Excel direkt mit der zweiten Datenbank verbunden. Ärgert mich nur, "leer" oder "1900-01-01" in den Zellen zu haben. –

Verwandte Themen