0

当我GETDATE()在 SQL Server Management Studio 中执行返回日期时间(如 )的函数时,输出的格式为用户的“文化”(区域/语言设置)。但是,当通过 cmdlet 在 Powershell 中执行相同的查询时,Invoke-Sqlcmd输出将被格式化为美国日期格式(我假设这是不变的文化)。其他 Cmdlet 例如Get-Date返回 CurrentCulture 中的日期时间。

如何确保输出Invoke-Sqlcmd尊重 CurrentCulture 设置?

演示的最小代码示例

$result = Invoke-Sqlcmd -query "select GETDATE() as datetime" -ServerInstance ...
$now = Get-date -format "yyyy-MM-dd HH:mm:ss"
if ( $result.datetime -eq $now) {
  Write-output "ok"
} else {
  Write-warning "dates mismatch '$($result.datetime)' should be '$now'"
}

警告显示以美国格式显示的第一个日期时间和以指定格式显示的第二个日期时间

4

1 回答 1

0

$result.datetime将是类型datetime,而$now将是类型string。这就是为什么您的比较和输出无法按预期工作的原因。您可以不将当前日期转换为字符串:

...
$now = Get-Date
if ($result.datetime -eq $now) {
...

但请记住,您将使用毫秒精度比较这两个值。根据您的格式字符串,我假设您只需要秒的精度。然后您可以执行以下操作:

...
$now = Get-Date
$format = 'yyyy-MM-dd HH:mm:ss'
if ($result.datetime.toString($format) -eq $now.toString($format)) {
...
于 2020-06-27T15:37:35.613 回答