[英]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.