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

时间:2019-05-06 20:58:33

标签: powershell

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

我使用ForEach格式化表格,然后使用Invoke-Sqlcmd将值注入查询中,除了需要更改日期和时间格式之外,该方法还可以。

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

我浏览了各个站点,试图弄清如何将文本格式化回其原始形式。除了将其重新处理成新的CSV文件并重复该过程外,我想不出一种方法来完成此任务(而且我什至不知道这样是否可以按预期工作。)

AppProxyProvider

我的输出 $ CSVLine变量显示:

$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'

然后,格式更改为。

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您将日期放入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)

......

有关日期时间How to format a DateTime in PowerShell

的帮助,请参见上一篇文章

答案 1 :(得分:0)

  • 使用用户提供的标题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-schumacher的答案中的建议转换为[datetime]。

根据您的语言环境,仅强制转换可能不够,然后尝试

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