首页 > 解决方案 > PowerShell - 选择带小数点分隔符的数字 (DB2 SQL)

问题描述

在使用 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)

我的问题是我该如何解决这个问题?是否有其他参数或这里缺少什么?

标签: powershelldb2powershell-5.0

解决方案


我还不能发表评论。

正如其他人所问的,数据库中价格列的数据类型是什么?根据您的输出,它是左对齐的,因此它似乎不是数字类型。

在这里使用 db2sample 数据库中的 PRODUCT 表进行简单测试:此外,您可以尝试使用 IBM.Data.Db2 .Net 提供程序而不是使用 ODBC。

$dbFactory = [System.Data.Common.DbProviderFactories]::GetFactory('IBM.Data.DB2')
$connection = $dbFactory.CreateConnection()
$connection.ConnectionString = "Database=SAMPLE"
$connection.Open()
$da = $dbFactory.CreateDataAdapter()


$ds = new-object "System.Data.DataSet"  
$cmd = $dbFactory.CreateCommand()
$cmd.Connection = $connection

$cmd.CommandText = "SELECT PID, PRICE FROM PRODUCT"
$da.SelectCommand = $cmd 

$da.Fill($ds)
$ds.Tables[0]

产生预期的十进制格式。

PID        PRICE
---        -----
100-100-01  9,99
100-101-01 19,99
100-103-01 49,99
100-201-01  3,99


$ds.Tables[0].Columns[1].DataType

IsPublic IsSerial Name                                     BaseType                                                                                             
-------- -------- ----                                     --------                                                                                             
True     True     Decimal                                  System.ValueType 

推荐阅读