Это полностью основано на ваших данных.Так что вы можете изменить его соответственно.
declare @RawData as Table
(
LastUpdate DateTime,
Time Varchar(20)
)
declare @Data as Table
(
RowId int,
LastUpdate DateTime,
Time Varchar(20)
)
declare @FinalData as Table
(
LastUpdate DateTime,
Time Varchar(20),
[DateTime] DateTime
)
Insert into @RawData values ('2018-06-21 23:09:21.947','21-06-2018')
Insert into @RawData values ('2018-06-21 23:09:21.947','23:09')
Insert into @RawData values ('2018-06-22 00:14:02.877','23:15')
Insert into @RawData values ('2018-06-22 00:29:13.660','22-06-2018')
Insert into @RawData values ('2018-06-22 00:29:13.660','23:15')
Insert into @RawData values ('2018-06-22 00:41:20.773','23-06-2018')
Insert into @RawData values ('2018-06-22 00:41:20.773','23:20')
Insert into @RawData values ('2018-06-22 02:58:44.160','23:22')
Insert into @RawData values ('2018-06-22 02:59:40.097','23:25')
Insert into @RawData values ('2018-06-22 03:00:07.770','23:28')
insert into @Data
Select ROW_NUMBER() OVER(ORDER BY LastUpdate ASC), * from @RawData
Declare @Count INT
SET @Count = (Select count(*) from @Data)
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=@Count)
BEGIN
Declare @Date varchar(10)
Declare @FinalDate varchar(10)
if((Select Len(trim(time)) from @data where RowId = @intFlag) =10)
Begin
SET @Date = (Select Convert(date, time, 104) from @data where RowId = @intFlag)
end
else
Begin
if((select Len(trim(time)) from @Data where RowID = @intFlag -1 ) = 10)
Begin
insert into @FinalData
Select LastUpdate, time, Convert(Datetime,@Date + ' ' + time) from @data where RowID = @intFlag
End
else
Begin
insert into @FinalData
Select LastUpdate, time, Convert(Datetime,@Date + ' ' + time) from @data where RowID = @intFlag
End
End
SET @intFlag = @intFlag + 1
END
Select * from @FinalData
GO