Добро пожаловать, warnerj79. Прежде всего, ваше утверждение SQL немного двусмысленно. Я бы рекомендовал всегда указывать AS ColumnName
при расчете параметров. Это поможет позже. Мне также нравится помещать мой SQL в переменную для удобства чтения. Таким образом, ваша строка SQL становится:
$strSQL = "SELECT TOP 1 LEFT(Column, 8) AS 'DateTimeString' FROM [dbo].[Table] ORDER BY ID DESC"
[array]$lastSQLdateArray = Invoke-Sqlcmd -ServerInstance INSTANCE -Database DATABASE -Query $strSQL
Тогда ваша переменная результатов ([array]$lastSQLdateArray
) будет содержать одну строку (из-за использования TOP 1
, поэтому вы получите доступ к свойству YYYYMMDD
как это:
$lastSQLdateArray[0].DateTimeString
Или, так как это только один элемент в массиве, это будет работать также:
$lastSQLdateArray.DateTimeString
Это значение в строковом формате. Чтобы преобразовать это к переменной [datetime]
я бы использовал метод parseexact
следующим образом:
$DateTimeVariable = [datetime]::ParseExact($lastSQLdateArray[0].DateTimeString,'yyyyMMdd',$null)
РЕДАКТИРОВАТЬ: добавлены следующие тестовые данные:
Я создал тестовую таблицу в моем SQL сервер с именем "m_test1" со следующими данными:
столбец идентификатора
1 20200218junk
Я использовал эти операторы:
$strSQL = 'SELECT TOP 1 LEFT([Column],8) as COL FROM [TEST].[dbo].[m_test1] ORDER BY ID'
$lastSQLDateArray = Invoke-Sqlcmd -ServerInstance 'servername' -Database 'TEST' -Query $strSQL
И я получил следующее:
PS C:> $returnvalue
COL
---
20200218
PS C:> $returnvalue.COL
20200218
PS C:> [datetime]::ParseExact($returnvalue.COL,'yyyyMMdd',$null)
Tuesday, February 18, 2020 12:00:00 AM
Надеюсь, это поможет! Если это произойдет, пожалуйста, не забудьте принять ответ с помощью галочки слева.