Поле даты не дает миллисекунд при выполнении сценария SQL в PowerShell - PullRequest
1 голос
/ 05 мая 2020

Я написал сценарий для выполнения SQL запроса и отправки электронной почты пользователю с SQL результатами. Столбец базы данных имеет поле даты в формате YYYY-MM-DD hh:mm:ss:mi, но результат 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)

Вывод: 14.04.2020 12: 25: 03

Значение в БД: 2020-04-14 12: 25: 03.6028312

1 Ответ

1 голос
/ 05 мая 2020

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")
Использование Get-Date и параметра -Format:
$UserCreateDate = Get-Date ($Dataset.Tables[0].Rows[$noOfRows - 1].ItemArray[6]) -Format "yyyy-MM-dd HH:mm:ss.fff"

Имейте в виду, что оба параметра преобразуют вывод в строку и не будут сохраните объект DateTime.

Оба решения форматируют дату и время с заданной строкой формата. @ Lee_Dailey было так приятно указать на возможные форматы из документации здесь: Пользовательские строки формата даты и времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...