Sql-Server

Invoke-SQLCmd 日期輸出格式

  • November 10, 2019

我在執行 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');

結果(sqlcmd): 在此處輸入圖像描述

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 文件。

引用自:https://dba.stackexchange.com/questions/252914