Интересно, можете ли вы мне помочь! Я искал отличные ответы выше и Google и, увы, мне не удалось найти ответ на мою загадку!Преобразование SQL Возвращаемая дата в формат DateTime
По существу, я запускаю команду SQL из PowerShell, чтобы получить последнее время восстановления, но оно не отображается таким образом, чтобы я (я думаю) не мог сравниться с текущей датой, чтобы убедиться, что восстановление согласовано.
Скрипт работает как в ниже:
$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
Однако это возвращает формат как «07 февраля 2017 9:15:30».
Я бы предпочел, чтобы это был стандартизованный формат, например. dd/mm/yyyy
, чтобы я мог сравнить это значение с сегодняшней датой и если это что-то сделать.
Если у вас есть другой способ сделать сравнение, это нормально, мне просто нужно что-то сделать, если дата вернулась - сегодняшняя дата.
Действительно ли это код, на котором вы работаете? Потому что на данный момент '$ dbrestoredate' впервые упоминается в строке« Write-output », поэтому я сомневаюсь. Все хорошо, SQL-сервер 'datetime' будет переведен в структуру .NET' DateTime' без вмешательства и без * любого * форматирования. При форматировании только уродливая голова, если вы преобразовываете эти данные в * строки *. Избегайте конверсии, избегайте проблем. –
Извините, я изменил сценарий, чтобы показать больше того, что я пытаюсь сделать, и помочь вам, ребята, лучше понять мой вопрос, также забыл изменить «$ DBName = $ SqlCmd.ExecuteScalar()», он должен быть $ dbrestoredate вместо $ dbname –
Проверьте тип возвращаемых данных ('$ dbrestoredate.GetType(). FullName'). Если это 'System.DateTime', вы можете сравнить значение напрямую с другими датами (например, возвращаемое значение' Get-Date' или '[DateTime] :: Now'). Вы хотите только форматировать даты, когда вы представляете их пользователю. Я настоятельно рекомендую * против * использовать 'convert' здесь. –