我是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
我不确定如何利用查询的输出或将其重新格式化为以前存在的表。
关于如何进行此操作的任何建议?
谢谢。
答案 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)
......
的帮助,请参见上一篇文章
答案 1 :(得分:0)
Date,ColumnB,ColumnC,ColumnD
导入后您的命令
$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)