【问题标题】:Want to remove white space returned from a SQL query via Powershell想要删除通过 Powershell 从 SQL 查询返回的空格
【发布时间】:2013-06-13 13:39:39
【问题描述】:

我想从我们的 HP ALM QC 安装中检索所有用户,并拥有一个执行此操作的 Powershell 脚本。问题是它用空格填充输出,我认为,使其更具可读性。

这是脚本

$ServerInstance = "qc-server "
$Database = "qcsiteadmin_db "
$ConnectionTimeout = 30
$Query = "select USER_NAME, FULL_NAME, EMAIL from [td].USERS"
$QueryTimeout = 120

$conn=new-object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$conn.Close()
$ds.Tables

这个脚本给了我以下输出:

USER_NAME                               FULL_NAME                               EMAIL                                 
---------                               ---------                               -----                                 
user01                                  First Last                              user01@foo.com           
user02                                  First Last                              user02@foo.com             
user03                                  First Last                              user03@foo.com          

包含大量空格的精美表格数据,这使得导入 Excel 相当令人生畏...

然后我尝试将我的 SQL 查询更改为更适合的内容,即,我尝试创建一个分号分隔的输出,因为这样可以很好地导入。

$Query = "select USER_NAME + ';' + FULL_NAME + ';' + EMAIL from [td].USERS"

这几乎奏效了,因为我得到了以下输出:

Column1
-------

user01;First Last;user01@foo.com
user02;First Last;user02@foo.com
user03;First Last;user03@foo.com

没有显示的是所有行都在末尾用空格填充,一直到位置 119 - 这是很多空格...

所以,我最后的问题是:我怎样才能摆脱所有的空间?我可以在上面的脚本中执行此操作,还是需要在第一个脚本的输出上使用另一个脚本?

【问题讨论】:

    标签: powershell hp-quality-center


    【解决方案1】:

    尝试直接导出到 csv 文件:

    $ds.Tables | Export-Csv file.csv 
    

    【讨论】:

    • 这给了我这样的输出:"#TYPE System.Data.DataTable "CaseSensitive","IsInitialized","RemotingFormat","ChildRelations","Columns","Constraints","DataSet ","DefaultView","DisplayExpression","ExtendedProperties","HasErrors","Locale","MinimumCapacity",... 没有显示任何表格数据,我很遗憾地说。
    • 根据您的代码,您得到一个带有 $ds.Tables 的 3 列输出。这会让你得到同样的结果吗? $ds.Tables |选择 USER_NAME,FULL_NAME,EMAIL
    【解决方案2】:

    告诉数据库删除多余的空间(听起来字段是char(120) 而不是varchar)。

    $Query = "select rtrim(USER_NAME) as USER_NAME, rtrim(FULL_NAME) as FULL_NAME, rtrim(EMAIL) as FULL_NAME from [td].USERS"
    

    然后为 Excel 干净地导出为 CSV:

    $ds.Tables | export-csv FILENAME -notypeinformation
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多