【问题标题】:How to read a TIMESTAMP(6) with time zone data data type on oracle using powershell?如何使用 powershell 在 oracle 上读取具有时区数据数据类型的 TIMESTAMP(6)?
【发布时间】:2020-03-06 17:01:51
【问题描述】:

我需要使用 Powershell 读取 Oracle 表列(其数据类型为 TIMESTAMP(6) 和时区)或使用 Powershell 将时间戳数据类型转换为字符串。

表:

select * from job;

|

表格的数据类型:

JOB_id : 编号 日期:时间戳(6)与时区
  $query = "SELECT * FROM JOB WHERE JOB_ID=12345"
  $command=$connection.CreateCommand()
  $command.CommandText=$query
  $reader=$command.ExecuteReader()

  while ($reader.Read()) {
      $date=$reader.getInt32(0).ToString() 
      Write-Output $date
  }

错误信息:

 Exception calling "GetString" with "1" argument(s): "Specified cast is
 not valid." At D:\SelfAnalysisKit\job.ps1:765 char:15
 +               $date=$reader.Getstring(2)
 +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : InvalidCastException

【问题讨论】:

  • 日期戳既不是整数也不是字符串。同样,读者的结果是 SqlDataReader 你有一些严重的数据类型问题
  • 如果你还是把它转换成一个字符串,你可以在你的sql中做=> TO_CHAR(DATE , 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM')你所要做的就是调整日期的格式

标签: powershell oracle11g


【解决方案1】:

$reader 中存储了什么值? 我无权访问 Oracle 来测试这个。 您可以通过管道将变量传递给 Get-Member cmdlet,以查看您拥有的对象类型。

$reader | Get-Member

您可以通过使用查看对象属性的值

$reader | Select *

如果您发布这两个命令的输出,我可能会对您有所帮助。

如果您查看 SQLDataReader 的方法,您会看到 GetDateTime(Int32) 这可能会让您更接近您想要的结果。

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqldatareader?view=netframework-4.8

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2011-02-21
    • 2016-03-06
    • 2022-01-26
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多