Ich schreibe eine Abfrage, um eins unserer Geräte abzufragen und dem Server unseren Solarwinds-Server zu melden. Es ist eine semi-erweiterte SQL-Abfrage, meine Ergebnisse als richtig kommen, aber ich bekomme diese Fehlermeldung:Zeichenfolge in Datetime-Fehler konvertieren
Msg 242, Ebene 16, Status 3, Zeile 1 Die Umwandlung eines nvarchar-Datentypen auf einen Typen Datetime-Daten resultierte in einem Wert außerhalb des Bereichs.
Ich bin neu in SQL, also bin ich mir nicht sicher, was ich zu lösen habe. Mein Codeblock ist unten:
SELECT tbl2.Load [Source], tbl3.Destination [Destination], tbl1.Status [Status], tbl4.Status [TimeStamp],
CONVERT(datetime, SUBSTRING (tbl4.Status,5,3) + ' ' + SUBSTRING(tbl4.Status,9,2) + ' , ' + SUBSTRING(tbl4.Status,25,4) + ' ' + SUBSTRING(tbl4.Status,11,6)) AS DATE,
DATEDIFF(HOUR,CONVERT(datetime, SUBSTRING (tbl4.status,5,3) + ' ' + SUBSTRING(tbl4.status,9,2) + ' , ' + SUBSTRING(tbl4.status,25,4) + ' ' + SUBSTRING(tbl4.status,11,6)) , GETDATE()) AS Timediff
FROM Nodes n
join (SELECT ca.nodeid, cs.Status [Load]
FROM CustomPollerStatus cs
JOIN CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN CustomPollerS cp ON ca.CustomPollerID=cp.CustomPollerID
where cp.UniqueName='SnapMirrorSrc'
) tbl2 on n.Nodeid =
tbl2.NodeID
join (select ca.nodeid, cs.Status [Destination]
FROM CustomPollerStatus cs
JOIN CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN CustomPollerS cp ON ca.CustomPollerID=cp.CustomPollerID
where cp.UniqueName='snapmirrordst'
) tbl3 on n.Nodeid = tbl3.NodeID
join (SELECT ca.nodeid, cs.Status
FROM CustomPollerStatus cs
JOIN CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN CustomPollerS cp ON ca.CustomPollerID=cp.CustomPollerID
WHERE cp.UniqueName='SnapMirrorState'
) tbl1 on n.Nodeid = tbl1.NodeID
join (select ca.nodeid, cs.Status
from CustomPollerStatus cs
join CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN customPollerS cp on ca.CustomPollerID=cp.CustomPollerID
WHERE cp.UniqueName='snapmirrorMirrorTimestamp'
) tbl4 on n.NodeID = tbl4.NodeID
where tbl1.Status like 'unk%'
Hier meine Ergebnisse sind:
Allerdings bekomme ich diesen Fehler: Msg 242, Ebene 16, Status 3, Zeile 1 Die Umwandlung einer nvarchar Datentyp zu einem Datetime-Datentyp führte zu einem Wert außerhalb des Bereichs.
So sind meine Ergebnisse korrekt, aber ich bekomme diesen Fehler. Nicht sicher, was das Problem ist. Jede Hilfe würde freundlich geschätzt werden.
**** --- EDIT --- ****
Also änderte ich meinen Code ein wenig, aber jetzt in der Spalte Datum im 1900-01-01 bekommen 00: 00: 00.000
SELECT tbl2.Load [Source], tbl3.Destination [Destination], --tbl1.Status [Status],
tbl4.Status [TimeStamp],
CASE
WHEN tbl4.status LIKE '[A-Z][A-Z][A-Z] %[1-9][1-9][1-9][1-9]' THEN
CONVERT(datetime, SUBSTRING (tbl4.Status,5,3) + ' ' + SUBSTRING(tbl4.Status,9,2) + ' , ' + SUBSTRING(tbl4.Status,25,4) + ' ' + SUBSTRING(tbl4.Status,11,6))
ELSE '' END AS [DATE],
CASE
WHEN tbl4.status LIKE '[A-Z][A-Z][A-Z] %[1-9][1-9][1-9][1-9]' THEN
CAST (DATEDIFF(HOUR,CONVERT(datetime, SUBSTRING (tbl4.status,5,3) + ' ' + SUBSTRING(tbl4.status,9,2) + ' , ' + SUBSTRING(tbl4.status,25,4) + ' ' + SUBSTRING(tbl4.status,11,6)) , GETDATE())AS bigint)
ELSE '' END AS 'Time Since Last Snap'
FROM Nodes n
join (SELECT ca.nodeid, cs.Status [Load]
FROM CustomPollerStatus cs
JOIN CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN CustomPollerS cp ON ca.CustomPollerID=cp.CustomPollerID
where cp.UniqueName='SnapMirrorSrc'
) tbl2 on n.Nodeid =
tbl2.NodeID
join (select ca.nodeid, cs.Status [Destination]
FROM CustomPollerStatus cs
JOIN CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN CustomPollerS cp ON ca.CustomPollerID=cp.CustomPollerID
where cp.UniqueName='snapmirrordst'
) tbl3 on n.Nodeid = tbl3.NodeID
join (select ca.nodeid, cs.Status
from CustomPollerStatus cs
join CustomPollerAssignment ca ON (cs.CustomPollerAssignmentID=ca.CustomPollerAssignmentID)
JOIN customPollerS cp on ca.CustomPollerID=cp.CustomPollerID
WHERE cp.UniqueName='snapmirrorMirrorTimestamp'
) tbl4 on n.NodeID = tbl4.NodeID
Versuchen Sie, eine SELECT tun, ohne die Konvertierung in DATETIME und sehen, ob irgendwelche Werte keine gültigen Daten sind. –
Geben Sie anstelle des gesamten SELECT auch nur die Teile an, die das Problem verursachen (z. B. bezogen auf das fragliche Feld). – FDavidov
Ihr Bild zeigt die Statusspalte mit dem Wert 'unbekannt'. Ist dies der tbl4.Status, den Sie in eine Datetime konvertieren möchten? – openshac