从AS / 400数据库文件转换日期

时间:2018-10-03 19:39:50

标签: sql datetime time

我正在使用MS SQL Server,正在尝试将日期和时间数据转换为对PowerBi和 没时间上班,日期还可以:

USE [CDCP_AEP]
GO

select *
from
(SELECT [H1PROD]
        ,convert(DATE,right('0'+str([H1DTTR],len([H1DTTR])),6),102) as 'AssyDate'
        ,[H1TMTR]
        ,right('000000'+str([H1TMTR],len([H1TMTR])),6) 'TempTime'
        ,[H1TYPE]
        ,[H1LOT]
        ,[H1SORD]
        from [AEBPCSUSRF].[JHP1]
        where [H1TYPE] = 'AF' and [H1LOT] <> '')a
    left join
  (select [P1PROD]
         ,[P1LOT]
  from [AEBPCSUSRF].[PLA1])b
    on a.[H1LOT] = b.[P1LOT]
    GO

这是我通过上面的代码得到的结果:

Result

如果我将日期(H1TMTR)行更改为

,convert(TIME,right('000000'+str([H1TMTR],len([H1TMTR])),6)) as 'AssyTime'

我收到以下错误: “ Msg 241,第16级,州1,第4行 从字符串转换日期和/或时间时转换失败。“

有什么提示吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

您可以通过填充,子串化并将冒号插入各部分之间来进行转换,如下所示:

DECLARE @H1TMTR VARCHAR(6)='155509'
SELECT CONVERT(TIME,
      SUBSTRING(RIGHT('000000' + @H1TMTR,6),1,2) + ':'
    + SUBSTRING(RIGHT('000000' + @H1TMTR,6),3,2) + ':'
    + SUBSTRING(RIGHT('000000' + @H1TMTR,6),5,2)
) AS [Time]

由于您正在为PowerBI进行此操作,所以我想您会做很多。您应该制作一个在列上执行此任务的标量函数,因此只需要编写一次即可。