Ich frage mich, ob Sie mir helfen können! Ich habe die großen Antworten von oben und Google gesucht und leider konnte ich die Antwort auf mein Rätsel nicht finden!Convert SQL Zurückgegebenes Datum in DateTime Format
Im Wesentlichen führe ich einen SQL-Befehl aus PowerShell, um die letzte Wiederherstellung Datum Zeit abzurufen, aber es wird nicht auf eine Weise angezeigt, die ich nicht mit dem aktuellen Datum vergleichen kann, um zu sehen, ob die Wiederherstellung konsistent ist.
Das Skript läuft wie pro unten:
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=SERVER\Instance;Database=DataBaseName;Integrated Security=True"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "DECLARE @DB sysname = 'DataBaseName';
SELECT TOP 1 restore_date
FROM msdb.dbo.restorehistory
WHERE destination_database_name = @DB
ORDER BY restore_date DESC;"
$SqlCmd.Connection = $SqlConnection
$dbrestoredate = $SqlCmd.ExecuteScalar()
$SqlConnection.Close()
Write-Output "Database Restore date " $dbrestoredate
Jedoch gibt diese das Format als „7. Februar 2017 09.15.30“.
Ich würde viel lieber ein standardisiertes Format, z. dd/mm/yyyy
, damit ich diesen Wert mit dem heutigen Datum vergleichen kann und wenn es ein Match ist, etwas tun.
Wenn Sie einen anderen Weg haben, den Vergleich zu machen, der von mir in Ordnung ist, muss ich nur etwas tun, wenn das zurückgegebene Datum das heutige Datum ist.
Ist das wirklich der Code, den Sie ausführen? Da '$ dbrestoredate' zum ersten Mal in der 'Write-output'-Zeile erwähnt wird, bin ich zweifelhaft. Alles in allem wird ein SQL Server 'datetime' in eine .NET' DateTime'-Struktur ohne Eingriff und ohne * irgendeine * Formatierung übersetzt. Das Formatieren stellt nur einen hässlichen Kopf dar, wenn Sie diese Daten in * Strings * konvertieren. Vermeiden Sie die Konvertierung, vermeiden Sie die Probleme. –
Entschuldigung, ich habe das Skript geändert, um mehr von dem zu zeigen, was ich zu tun versuche, und um euch zu helfen, meine Frage besser zu verstehen, habt auch vergessen "$ DBName = $ SqlCmd.ExecuteScalar()" zu ändern, es sollte $ dbrestoredate anstelle von $ dbname –
sein Überprüfen Sie den Typ der zurückgegebenen Daten ('$ dbrestoredate.GetType(). FullName'). Wenn es "System.DateTime" ist, können Sie den Wert direkt mit anderen Daten vergleichen (z. B. den Rückgabewert von "Get-Date" oder "[DateTime] :: Now"). Sie möchten nur Daten formatieren, wenn Sie sie einem Benutzer präsentieren. Ich empfehle dringend * gegen * mit 'convert' hier. –