1

我有一个日期时间格式的文档列,但它总是将时间留空,并且我有一个时间字段,它是一个表示小时和分钟(不包括秒)的整数。我想转换时间并将其添加到日期,以便我可以选择Max(datetime)并返回单个值。

这是我的SQL 小提琴

数据存储如下:

DocDate                 DocTime
2013-04-29 00:00:00.000 1416
2013-04-29 00:00:00.000 1027
2013-04-29 00:00:00.000 823

我想将其转换为:

DateTime
2013-04-29 14:16:00.000 
2013-04-29 10:27:00.000 
2013-04-29 08:23:00.000 
4

4 回答 4

2

这应该这样做:

;WITH CTE AS
(
    SELECT  *,
            DATEADD(HOUR,DOCTIME/100,DOCDATE) DocDateHour,
            CAST(RIGHT(DOCTIME,2) AS INT) DocTimeOnly
    FROM OPOR
)
SELECT DATEADD(MINUTE,DocTimeOnly,DocDateHour)
FROM CTE

这是修改后的 sqlfiddle供您尝试。

于 2013-04-30T19:57:48.513 回答
1

Sql 小提琴

select 
dateadd(hh, convert(int,left(doctime,len(doctime)-2)),
dateadd(mi, convert(int,right(doctime,2)) ,docdate))
from opor

使用dateadd将小时(左侧 1 个或 2 个 doctime 字符)和分钟(右侧 2 个 doctime 字符)添加到日期。

于 2013-04-30T19:57:13.733 回答
1

只需将它们都视为日期时间并相加:

select  DocDate,
        DocTime,
        DocDate + stuff(right('0000'+cast(DocTime as varchar(4)), 4), 3, 0, ':')
from    OPOR

参见示例: http ://sqlfiddle.com/#!3/8e22e/54

于 2013-04-30T19:57:48.107 回答
1

一些简单的日期算术就可以了;

SELECT DATEADD(mi, FLOOR(DocTime/100)*60 + DocTime%100, DocDate) FROM OPOR;

一个用于测试的 SQLfiddle

于 2013-04-30T19:57:50.253 回答