CSV数据的字符串操纵和输出格式用于插入SQL数据库



我是PowerShell的新手,我正在尝试将数据从CSV日志文件导入到SQL数据库中。

我使用foreach格式化表并使用Invoke-sqlcmd将值注入查询,除了需要更改日期和时间格式外,它可以正常工作。

我首先重新格式化日期和时间以匹配SmallDateTime格式。

我已经浏览了各个站点,试图弄清楚如何将文本格式化为原始形式。除了将其重新处理回新的CSV文件并重复该过程之外,我无法想到一种实现这一副手的方法(我什至不知道这是否会按预期工作。(

$CSVImport = Import-CSV $FileBrowser.FileName -Header $FSHeader | Select $_ | ? Time -NotLike 'Time'
             $CSVRowCount = $CSVImport.Count
             "Inserting $CSVRowCount rows from CSV into SQL Table"
             ForEach ($CSVLine in $CSVImport) {
                $CSVLine
                $CSVLine = $CSVLine -Replace '(d{1,2})/(d{1,2})/(d{4})', '$3/$1/$2'
$CSVLine = $CSVLine -Replace '(d{1,2})/(d{1,2})/(d{4})', '$3/$1/$2'

我的输出$ csvline变量显示:

Date           ColumnB ColumnC ColumnD 
-------------- ------- ------- ------
2/7/2017 13:28 Second  Third   Last    

之后,格式更改为。

@{Date=2017/2/7 13:28; ColumnB=Second; ColumnC=Third; ColumnD=Last}

我不确定如何利用查询的输出或将其重新格式化回之前存在的表。

关于如何进行此操作的任何建议?

预先感谢您。

  • 与您提供的用户导入后Date,ColumnB,ColumnC,ColumnD
    $ csvimport是一个具有属性的对象 - $ csvline也是。

您的命令

$CSVLine = $CSVLine -Replace ...

强制PowerShell用其属性将对象串起,导致输出

@{Date=2017/2/7 13:28; ColumnB=Second; ColumnC=Third; ColumnD=Last}

您只能在$CSVLine.Date上进行替换
但是,最好像汤姆·舒马赫(Thom-Schumachers(中建议的那样转换为[dateTime]。

根据您的语言环境的不同,可能还不够,然后尝试

[datetime]::ParseExact($CSVLine.Date,"M/d/yyyy HH:mm",$Null)

如果将日期放在DateTime类型

[datetime]'2017/2/7 13:28'

然后,您将拥有一个可以使用的日期时间对象,以使您的心脏格式化:

[datetime]'2017/2/7 13:28' | gm

   TypeName: System.DateTime
Name                 MemberType     Definition                                                                                                                  
----                 ----------     ----------                                                                                                                  
Add                  Method         datetime Add(timespan value)
......

请参阅过去的文章,以获取有关如何格式化powershell中的日期时间的帮助

最新更新