【发布时间】:2020-05-25 07:53:16
【问题描述】:
在使用 PowerShell 选择 DB2 数据时,无法弄清楚如何包含小数点分隔符。
DB2 表包含带有商品价格的列:
+------+---------+
| Item | Price |
+------+---------+
| A | 99,104 |
| B | 27,05 |
| C | 320,001 |
+------+---------+
这是获取此数据的 Powershell 脚本的一部分:
$SQL = "SELECT Item, Price FROM Inventory"
$connection = New-Object System.Data.Odbc.OdbcConnection
$connection.ConnectionString = "DSN=$DNS;UID=$USERNAME;password=$PASSWORD"
$connection.open() | Get-Item -ErrorAction Stop
$cmd = New-object System.Data.Odbc.OdbcCommand($SQL,$connection)
$result = New-Object system.Data.DataSet
(New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($result) # here comma gets removed from Price
$connection.close()
$result.Tables[0] | Export-Csv -NoTypeInformation -Delimiter -Encoding UTF8 $OutputFile
这会以某种方式选择不带小数的数据,这是不正确的 - 价格现在非常高:
99104
2705
320001
我虽然在 Export-Csv 期间删除了逗号,所以添加了 -UseCulture,但结果是一样的。选择数据时似乎删除了逗号:
New-Object system.Data.odbc.odbcDataAdapter($cmd)
我的问题是如何解决这个问题?是否有额外的参数或这里缺少什么?
【问题讨论】:
-
我认为这与您的文化设置有关。 “十进制”分隔符设置在那里[逗号用于某些,点用于其他,可能使用其他人]。您可能需要设置该分隔符或手动更正它。我不知道如何将其设置为仅用于一种用途。 [脸红]
-
问题可能出在 DataSet 默认区域设置中。尝试在使用之前将 DataSet 的
Locale属性设置为$result.Locale = [cultureinfo]::CurrentCulture。 -
您好,用几种不同的文化设置(da-DK、en-US、en-GB)进行了测试,但结果是相同的。 (New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($result) 删除小数点分隔符。尝试阅读并弄清楚如何向当前代码添加其他参数:docs.microsoft.com/en-us/dotnet/api/…
-
价格是什么数据类型?如果在 select 语句中将其转换为 varchar 会怎样?
-
@vonPryz ,我不知道数据类型,但 CASE(Price AS VARCHAR(10)) 有效,谢谢!我想知道是否可以在不修改 SQL 语句的情况下解决此问题,但可以通过 PowerShell 解决。
标签: powershell db2 powershell-5.0