在ETL SQL查询

时间:2018-02-09 15:21:33

标签: sql datetime business-objects

我需要将多个日期和时间字段组合到SQL查询中的日期时间中。遗憾的是,我无法更改初始数据库结构以将它们组合在原始服务器中 我可以在导出后组合SQL Query数据,但由于平面文件转换的问题,以及数据损坏/丢失的可能性,我犹豫不决,因为我需要将平面文件转换两次。

这些是我尝试过的东西:

    SELECT Combine = cast([DateValue] as datetime) + Cast([TimeValue] as datetime) 

不幸的是,这会导致错误,我的列数少于原始字段....

原始查询如下所示:

    SELECT 
      Ordered_Date.DateValue, 
      Ordered_TOD.TimeValue, 
      Start_Date.DateValue, 
      Start_TOD.TimeValue, 
      End_Date.DateValue, 
      End_TOD.TimeValue, 
    Discontinued_Date.DateValue, 
    Discontinued_TOD.TimeValue 

    FROM 
       warehouse_report........... 

    WHERE 
        ( ..... )

如果我将The Combine命令添加到SQL查询中,似乎它正在组合日期/时间。问题是,当我在SQL查询的SELECT部分​​实现它时,我减少了1列,它不会让我执行脚本...

    SELECT 
      Ordered_Date.DateValue, 
      Ordered_TOD.TimeValue, 
      Start_Date.DateValue, 
      Start_TOD.TimeValue, 
      COMBINE = CAST(End_Date.DateValue as datetime) + CAST(End_TOD.TimeValue as datetime), 
      Discontinued_Date.DateValue, 
      Discontinued_TOD.TimeValue 

    FROM 
       warehouse_report........... 

    WHERE 
        ( ..... )

这给了我一个关于SQL Query输出的专栏......

1 个答案:

答案 0 :(得分:0)

如何连接值和解析:

SELECT cast([DateValue]||' '||[TimeValue] as datetime)

请提供有关您正在使用哪个SGBD以获得更好答案的信息。

EDIT1:

到SQL Server:

Select
    x.d1
From (
    Select 
        convert(datetime, '2018-01-01 00:00:00.0', 121) d1
) x
Union All
Select
    convert(datetime,
        substring(convert(varchar, x.d1, 121), 1, 11)
        + substring(convert(varchar, x.t1, 121), 11, 13)
    , 121)
From (
    Select 
        convert(datetime, '2018-01-01 00:00:00.0', 121) d1,
        convert(datetime, '10:00:22') t1
) x