如何替换CSV文件Account列数据:PowerShell处理或SQL端修改方案
账户编码替换实现方案
方案1:PowerShell侧处理CSV
核心思路是提前定义编码和业务名称的映射哈希表,遍历行时直接查表替换即可,修改后的代码如下:
# 定义编码-业务名称映射,可自行扩展更多键值对 $accountMap = @{ "001" = "Hardware" "002" = "Software" # 继续添加其他编码对应关系 } $Results = Import-Csv Expenses.csv # 无需提前定义空数组,直接输出结果即可,性能更高 $Results | ForEach-Object { [pscustomobject][ordered] @{ # 查表替换,没有匹配的编码会保留原始值 Account = $accountMap.ContainsKey($_.Account) ? $accountMap[$_.Account] : $_.Account Vendor = $_.Desc1 Item = $_.Desc2 Amount = $_.Amount } }
如果你的PowerShell版本不支持三目运算符,可以换成普通if判断写法:
Account = if($accountMap.ContainsKey($R.Account)){ $accountMap[$R.Account] }else{ $R.Account }
方案2:SQL导出阶段直接处理(更推荐)
如果可以调整导出数据的SQL脚本,直接在查询时做替换效率更高,不需要后续对CSV做二次处理,示例SQL如下:
SELECT CASE Account WHEN '001' THEN 'Hardware' WHEN '002' THEN 'Software' -- 继续添加其他编码的WHEN分支 ELSE Account -- 未匹配的保留原始编码 END AS Account, Desc1 AS Vendor, Desc2 AS Item, Amount FROM 你的业务表名 -- 后面接你原来的查询过滤条件即可
用这个SQL导出的CSV文件已经完成了Account字段的替换,不需要再做额外处理。
内容的提问来源于stack exchange,提问作者nosupport2020
相关产品推荐
相关产品推荐

