将日期格式转换为CSV导出

时间:2020-05-13 23:58:24

标签: sql powershell csv

我是Poweshell的新手,我制作了一个脚本,将SQL Select的结果导出到csv。但是我有两列的日期格式为mm-dd-yyyy,我希望它的格式为yyyy-MM-dd HH:mm:ss.fff。我只能转换一列,而在另一列中,我找不到转换的方法。

有人可以帮我转换两列吗?

_id                       Count
---                       -----
@{STATUS=ERROR; Job=JOB2}     3

我需要转换的列是“ Dataemissao”和“ Dataultimaliq”

1 个答案:

答案 0 :(得分:0)

在这种情况下,您在选择对象中需要很长的一行:

$DataSet.Tables[0] | 
    Select-Object -ExcludeProperty Dataemissao, Dataultimaliq @{Name = "Dataemissao";   Expression= { '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]$_.Dataemissao }},
                  @{Name = "Dataultimaliq"; Expression= { '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]::ParseExact($_.Dataultimaliq, 'MMM dd yyyy hh:mm tt', [cultureinfo]"en-US") }},
                  * | Export-Csv -Path $OuputFile -Encoding UTF8 -NoTypeInformation

或者,您可以在

之类的代码上方添加一个小的辅助函数。
function Format-Date () {
    param (
        [string]$dateString,
        [string]$format = 'MMM dd yyyy hh:mm tt'
    )
    $date = Get-Date
    if ([datetime]::TryParseExact($dateString, $format, [cultureinfo]"en-US", 0, [ref]$date)) {
        return '{0:yyyy-MM-dd HH:mm:ss.fff}'-f $date
    }
}

并将其用于Dataultimaliq

@{Name = "Dataultimaliq"; Expression= { Format-Date $_.Dataultimaliq }},

如您所见,我在第二个参数$format中添加了默认值“ MMM dd yyyy hh:mm tt”,因为这是返回的Dataultimaliq字段所使用的格式。 > 您也可以在Dataemissao字段上使用该格式,但我不知道该格式是什么。(显然,您的系统可以将其强制转换为DateTime对象,而没有任何问题)

我看到您稍后阅读了csv文件,并从中删除了引号。这可能会导致各种问题,因为有时CSV文件中需要使用引号,而您不应该简单地删除所有引号。看看this answer的代码,了解如何安全地完成此操作

P.S。 '{0:yyyy-MM-dd HH:mm:ss.fff}'-f [datetime]$_.Dataemissao是一种获取特定格式日期的更“ PowerShelly”方式。它返回的内容与([datetime]$_.Dataemissao).ToString("yyyy-MM-dd HH:mm:ss.fff")相同,但更加简洁。