繁体   English   中英

在SQL Server中为SSIS包目的转换列

[英]Casting columns in SQL Server for SSIS package purpose

我坚持在SQL Server中投射数据。 我正在使用SSIS包将数据从SQL Server传输到Oracle数据库,而在Oracle中,我有以下类型的列:

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

代表半个小时的全部时间。 我的意思是前:3.5小时

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

Registered_hours: int
Approved_hours: int

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

您可以使用Derived Column Transformation使用以下表达式添加派生列(小时=分钟/ 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)

参考

据我所知,你想转换(例如)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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM