Sql-Server
Invoke-SQLCmd 日期輸出格式
我在執行 PowerShell 腳本(Using
Invoke-SQLCmd
)以獲取結果並將輸出發送到 .csv 文件時從儲存過程中獲取的結果集有問題。日期列也帶回了時間,見下文。我在 Adventure 作品中設置了一個簡單的範例。
我的命令是執行一個簡單的儲存過程,以從
Adventureworks
.Invoke-Sqlcmd -ServerInstance "MY-PC\SQL2016" -Database "AdventureWorks2016" -Query "EXEC[AdventureWorks2016].[dbo].[SOH]" | Select-Object -Property SalesOrderID, OrderDate
沒關係,我可以過濾掉我想要的列,但我有時間
00:00:00
在訂單日期列中。我只想要日期。我已經用Google搜尋了,但我仍然遇到這個問題。請參閱下面的結果集。我需要的OrderDate
只是日期。暫不追加00:00:00
。SalesOrderID OrderDate ------------ --------- 43659 31/05/2011 00:00:00 43660 31/05/2011 00:00:00 43661 31/05/2011 00:00:00 43662 31/05/2011 00:00:00 43663 31/05/2011 00:00:00 43664 31/05/2011 00:00:00 43665 31/05/2011 00:00:00 43666 31/05/2011 00:00:00 43667 31/05/2011 00:00:00 43668 31/05/2011 00:00:00
您必須按以下方式呼叫查詢,或
CONVERT()
按McNets所述使用-Q "select c1, Cast(cdate as date) as Date from TestOffline.dbo.T1"
測試腳本
Create Table T1 (c1 int, cDate datetime) go Insert into T1 VALUES (1, '2019-11-01'), (2, '2019-11-02'), (3, '2019-11-03');
PS:在使用 FORMAT() 送出之前,請考慮這篇文章並測試您的案例
Invoke-SQLCmd 帶回 .Net DateTime 對象,而不是字元串。PowerShell 負責將其更改為字元串。請查看以下連結以獲取更多資訊:DateTime struct
您可以在 PowerShell 中進行所有類型轉換和格式化,有一個範例:
create PROCEDURE [dbo].[SOH] AS select getdate() as OrderDate,12 as SalesOrderID
Invoke-Sqlcmd -ServerInstance "(localdb)\ProjectsV13" -Database "SSDT Demo" -Query "exec [dbo].[SOH]" | foreach {[PSCustomObject][Ordered]@{ SalesOrderID = $_.SalesOrderID OrderDate = $_.OrderDate.ToString("MM/dd/yyyy") dateraw = $_.OrderDate } } | ConvertTo-Csv
它會產生:
#TYPE System.Management.Automation.PSCustomObject "SalesOrderID","OrderDate","dateraw" "12","11/10/2019","11/10/2019 12:20:51 PM"
我添加了一個額外的 dateraw 列來更好地解釋它,您需要跳過它以進行導出。
我還添加了“converTo-Csv”,因為有人提到它將保存為 csv 文件。