PowerShell脚本中SQL命令的变量拼接失效问题
PowerShell日期变量拼接SQL时显示类名的解决方法
问题根源
你使用的Format-Table -HideTableHeaders会生成控制台格式化专用的对象,而非纯字符串。虽然控制台输出看起来是正确的日期值,但$Lastextracteddate实际存储的是格式化对象实例,拼接SQL时会输出对象的类型名称而非目标字符串。
解决方法
替换Format-Table操作,直接提取纯字符串值,有两种常用方式:
方式一:使用Select-Object -ExpandProperty提取属性值
修改后的完整代码:
$Lastextracteddate=Get-ChildItem $folder | Select-Object @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyyMMddHHmmss")}} | Select -LAST 1 | Select-Object -ExpandProperty LastWriteTime $queryresult="select count(1) from user_table WHERE replace(convert(varchar,[CREATE_S],112),'/','') + replace(convert(varchar,[CREATE_S],108),':','')>'$Lastextracteddate'" echo $Lastextracteddate echo $queryresult
-ExpandProperty会直接取出自定义属性LastWriteTime的字符串值,而非包装成对象。
方式二:简化流程,用ForEach-Object直接生成字符串
更简洁的写法,跳过中间自定义属性步骤:
$Lastextracteddate=Get-ChildItem $folder | Sort-Object LastWriteTime | Select-Object -Last 1 | ForEach-Object { $_.LastWriteTime.ToString("yyyyMMddHHmmss") } $queryresult="select count(1) from user_table WHERE replace(convert(varchar,[CREATE_S],112),'/','') + replace(convert(varchar,[CREATE_S],108),':','')>'$Lastextracteddate'" echo $Lastextracteddate echo $queryresult
验证效果
修改后$Lastextracteddate会直接存储纯日期字符串,拼接SQL语句时就能正确代入目标值。
内容的提问来源于stack exchange,提问作者synccm2012
相关产品推荐
相关产品推荐

