将SQL返回日期转换为DateTime格式

时间:2017-02-07 11:39:27

标签: sql sql-server tsql powershell sql-server-2008-r2

我想知道你是否可以帮助我!我已经搜索了上面的优秀答案和谷歌和唉,我一直无法找到我的难题的答案!

基本上我从PowerShell中运行一个SQL命令来检索最后一次恢复日期时间但是它没有以我(我认为)无法与当前日期进行比较的方式显示,以查看恢复是否一致。

运行的脚本如下:

$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

然而,这会将格式恢复为“2017年2月7日09:15:30”。

我更喜欢这是一种标准格式,例如dd/mm/yyyy以便我可以将该值与今天的日期进行比较,如果匹配则执行某些操作。

如果您有其他方式进行比较对我来说没问题,如果返回的日期是今天的日期,我只需要做一些事情。

2 个答案:

答案 0 :(得分:1)

尝试将其转换为字符串

select TOP 1 convert(varchar(20), restore_date, 103) as restore_date

如果您想更改最终格式,请查看MS Docs中的CONVERT

答案 1 :(得分:1)

您可以使用convert

select TOP 1 CONVERT(char(10), restore_date, 103) from msdb.dbo.restorehistory

这将返回一个字符串,表示请求格式的日期(dd/mm/yyyy

请注意,在不使用TOP x的情况下使用ORDER BY是不确定的,因为除非使用order by子句,否则无法保证查询返回的行的顺序。