在PowerShell中执行SQL脚本时,日期字段未提供毫秒

时间:2020-05-05 05:55:36

标签: sql powershell datetime powershell-2.0

我编写了一个脚本来执行SQL查询,并将具有SQL结果的电子邮件发送给用户。 数据库列具有格式为YYYY-MM-DD hh:mm:ss:mi的Date字段,但是SQL结果在Power Shell中给出了YYYY/MM/DD hh:mm:ss的格式。结果不由Milliseconds组成,并且日期采用不同的格式。如果我还必须在结果日期中获得毫秒数,我应该如何格式化?

param (
     [Parameter(mandatory = "true")]
     [string]$sqlserver,
     [Parameter(mandatory = "true")]
     [string]$sqlusername,
     [Parameter(mandatory = "true")]
     [string]$sqlpassword,
     [Parameter(mandatory = "true")]
     [string]$databasename
)
$query = "select * from dbo.UserDetails where createdate > '2020-04-13' order by createdate"
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='$Server';database='$databasename'; User ID = 'sqlusername' password= '$sqlpassword'"
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandText = $query
$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $Command
$Dataset = new-object System.Data.Dataset
$DataAdapter.Fill($Dataset)
$Connection.Close()
$noOfRows = $Dataset.Tables[0].Rows.Count
$UserCreateDate = $Dataset.Tables[0].Rows[$noOfRows - 1].ItemArray[6]
Write-Host ("The Latest User created " + $UserCreateDate)

输出: 4/14/2020 12:25:03

DB中的值: 2020-04-14 12:25:03.6028312

1 个答案:

答案 0 :(得分:1)

Powershell正在将您的SQL输出转换为DateTime-Object。默认输出格式由您的设置区域性决定(有关设置的更多信息,请尝试(Get-Culture).datetimeformat)。

有多种获取所需输出的方法:

  1. 使用.ToString-Method将输出格式设置为字符串:
$UserCreateDate = ($Dataset.Tables[0].Rows[$noOfRows - 1].ItemArray[6]).ToString("yyyy-MM-dd HH:mm:ss.fff")
  1. 使用Get-Date-Format参数:
$UserCreateDate = Get-Date ($Dataset.Tables[0].Rows[$noOfRows - 1].ItemArray[6]) -Format "yyyy-MM-dd HH:mm:ss.fff"

请记住,这两个选项都会将输出转换为字符串,并且不会保留DateTime-Object。

两个解决方案都使用给定的格式字符串格式化日期时间。 @Lee_Dailey很高兴在此处指出文档中可能的格式:Custom date and time format strings

相关问题