【问题标题】:Casting columns in SQL Server for SSIS package purpose为 SSIS 包目的在 SQL Server 中转换列
【发布时间】:2018-01-21 18:41:21
【问题描述】:

我坚持在 SQL Server 中转换数据。我正在做一个 SSIS 包来将数据从 SQL Server 传输到 Oracle 数据库,在 Oracle 中,我有以下类型的列:

Registered_hours: number(3,1)
Approved_hours: number(4,2)

代表半小时的完整小时。我的意思是例如:3.5h

在我的 SQL Server 数据库中,我有这些列,但我存储的是分钟而不是小时。所以我有 ex:480(8 小时)的值。

Registered_hours: int
Approved_hours: int

如何正确转换/转换这些值?例如:在 SQL Server 中,我有 510 分钟,相当于 8.5 小时。而我需要在转换后得到这个值。

【问题讨论】:

    标签: sql-server oracle ssis type-conversion etl


    【解决方案1】:

    您可以使用Derived Column Transformation 和以下表达式添加派生列(Hours = minutes / 60)

    我使用了(DT_NUMERIC,10,0),因为Registered_hours / 60 在没有它的情况下返回一个整数值

    (DT_NUMERIC,3,1)((DT_NUMERIC,10,0)Registered_hours / 60)
    

    (DT_NUMERIC,4,2)((DT_NUMERIC,10,0)Approved_hours/ 60)
    

    参考文献

    【讨论】:

      【解决方案2】:

      据我了解,您希望将(例如)510 转换为 8.5。如果是这样,这有什么好处吗?

      您只需要最后一个转换后的值,但我选择一步一步进行,以便您了解我这样做的原因和方式。

      SQL> with test as (select 65 minutes from dual union
        2                select 480        from dual union
        3                select 510        from dual)
        4  select minutes,
        5    trunc(minutes / 60) hours,
        6    round((minutes - (trunc(minutes / 60) * 60)) / 60, 2) hours_add,
        7    --
        8    trunc(minutes / 60) +
        9    round((minutes - (trunc(minutes / 60) * 60)) / 60, 2) converted
       10  from test;
      
         MINUTES      HOURS  HOURS_ADD  CONVERTED
      ---------- ---------- ---------- ----------
              65          1        ,08       1,08
             480          8          0          8
             510          8         ,5        8,5
      
      SQL>
      

      【讨论】:

      • 是的,这正是我想要的。谢谢!
      • @tylkonachwile 如果它解决了你的问题,你必须接受这个答案。
      • @Littlefoot 你会这么好心并告诉如何在 MSSQL 中实现同样的目标吗?我的意思是如何从 510 中得到 8,5,因为 trunc 在 MSSQL 中不是被识别的函数 :)
      • @tylkonachwile 如果您使用的是 SSIS,为什么不使用 Derived Column trasnformation?它是为类似情况而设计的!
      • 确定你是对的,我对 ssis 很新鲜,再次感谢 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多