【问题标题】:Export-CSV applies wrong formatting to DateTime columns of an SQL DataTableExport-CSV 将错误的格式应用于 SQL DataTable 的 DateTime 列
【发布时间】:2015-04-11 21:34:25
【问题描述】:

我正在运行下面包含的 Powershell 代码,以将简单的 SQL 选择查询的结果导出到 csv 文件中。如果我从 SQL Studio 运行相同的查询,我会得到这样的日期时间:

2014-08-06 15:05:49.663

通过 Export-CSV 运行它并打开生成的 csv 文件后:

2014 年 8 月 6 日下午 3:05:49

有什么想法可以在我的脚本中解决这个问题吗?

代码:

$ConnectionString = "Server={0};Database={1};User ID={2};Password={3};Trusted_Connection=False;Connect Timeout={4}" -f $ServerInstance,$Database,$Username,$Password,$ConnectionTimeout 
$conn=new-object System.Data.SqlClient.SQLConnection
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$ds.Tables[0] | export-csv -Delimiter '|' -Path 'c:\test.txt' -NoTypeInformation 

【问题讨论】:

  • 包含您希望重新格式化的日期时间的 SQL 列/PS 对象属性的名称是什么?
  • 有多个这样的列。还有多个表我想这样做,每个表都有不同的列名。

标签: .net sql-server datetime powershell csv


【解决方案1】:

您知道包含您要查找的日期的列的名称吗?为此,我假设它被称为Foo

$ds.Tables[0] | 
    Select-Object -ExcludeProperty Foo @{Name="Foo";Expression={([datetime]$_.Foo).ToString("yyyy-MM-dd HH:mm:ss.fff")}},* | 
    export-csv -Delimiter '|' -Path 'c:\test.txt' -NoTypeInformation 

如果这没用或没有帮助,请原谅我。这假定日期和时间详细信息尚未因数据导入而丢失。

这将默认导出除 Foo 之外的所有属性,并使用计算属性代替 Foo 来格式化输出字符串。

【讨论】:

  • 这在我尝试时不起作用......它会引发错误
  • @blizz 如果我知道错误是什么,那会真的很有帮助。可能只是一些我实际上可以解决的简单问题。
  • 对不起,我最终让它像你说的那样工作,但它好像什么也没做...... $ds.Tables[0] |选择对象-ExcludeProperty InsertDate @{Name="InsertDate";Expression={([datetime]$_.InsertDate).ToString("yyyy-MM-dd HH:mm:ss.fff")}} |导出-csv -分隔符'|' -Path 'c:\reports\test.txt' -NoTypeInformation
  • @blizz 你什么意思? csv没有输出?数据没有正确显示?我的代码在您的示例的输出中没有任何改变?
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2016-03-25
相关资源
最近更新 更多