[英]PowerShell date format not accepted in SQL
我遇到了一個奇怪的問題。 當服務器的Region and Language
設置設置為English (United States)
時,包含日期和時間的對象沒有問題。 但是,當我將其更改為我所在國家/地區的當地Dutch (Belgium)
時,我的一些 PowerShell 腳本遇到了問題。
PowerShell 中是否有某個變量需要設置以解決此問題? 還是我必須一直默認服務器上的英文日期格式?
例如,我們使用 Don Jones 提供的SQL module
來填充 SQL 數據庫。 此行在設置為荷蘭語時會生成錯誤,但在設置為英語時不會:
if ($properties[$property] -eq 'datetime2') { [datetime]$prop = $result.GetDateTime($result.GetOrdinal($property)) }
我檢索日期的唯一方法是Get-Date ,沒有任何特殊之處。 當設置為Dutch (Belgium)
時,它會生成此錯誤:
Exception calling "ExecuteNonQuery" with "0" argument(s): "Conversion failed when converting date and/or time from char
acter string."
在為Excel表生成內容時,我遇到了同樣的問題。 它還抱怨日期時間格式。
對於將DateTime
字段等信息導出到 SQL,默認語言設置為English (United States)
。
因此,當您的Region and Language
設置與 SQL 的默認設置不同時,即: English (United States)
<> Dutch (Belgium)
,您應該在代碼中使用以下格式以符合英語默認設置:
Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
$_.whenCreated.ToString('yyyy-MM-dd HH:mm:ss')
另一種解決方案是更改 SQL Express 2014 中輸入的默認語言:
Properties > Advanced
Default language
更改為Dutch
(或您使用的語言)Ok
確認SQL Management Studio
go 到Security > Logins
(在 Databases 下方)user name
和下面的 select Dutch
作為Default language
SQL Management Studio
,你應該對 go 好了結果:當您在 PowerShell 代碼中使用 CmdLet Get-Date
時,它會在將數據傳輸到 SQL 時按設計工作。SQL 和 Windows 的系統語言仍然是英語,但使用的格式是荷蘭語。
我將它用於 SQL 服務器中的 Datetime2。
Function Get-Datetime2([datetime]$Date = $(Get-Date) ) {
$DT = Get-Date -Date $Date
[string]$DateTime2 = $DT.Month.ToString() + '/'
[string]$DateTime2 += $DT.Day.ToString() + '/'
[string]$DateTime2 += $DT.Year.ToString() + ' '
[string]$DateTime2 += $DT.TimeOfDay.ToString()
return $DateTime2
}
Get-Datetime2
返回看起來像這樣的東西。
3/12/2018 03:04:34.7496659
如果您已經使用過 Don Jones 的模塊,您可能已經熟悉通過 *.types.ps1xml 的類型擴展...如果我沒記錯的話,他的模塊中也應該有一個。
添加以下類型聲明時,
<Type>
<Name>System.DateTime</Name>
<Members>
<ScriptMethod>
<Name>ToString</Name>
<Script>
$(Get-Date $This -Format "yyyy-MM-dd HH:mm:ss")
</Script>
</ScriptMethod>
</Members>
</Type>
您基本上將 System.DateTime 的 ToString() 方法重寫為標准 SQL Server 安裝所需的格式。
通過這種方式,您可以確保每次加載 SQL 模塊日期時,它們的格式都是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.