SQL 如何将日期整数键转换为日期时间

How to convert date integer keys into datetime in SQL

经过一番努力,我无法将 datekey (20200430) 和 timekey (103500) 转换为正确的日期时间 (2020-04-30 10:35:00)。我没有加入日期维度的选项,必须使用 SQL 函数转换数字。

我尝试过的:

CONVERT(VARCHAR(10), CAST([datekey] AS DATE),1005) AS DATE_CONVERTED
--this is not yet datetime, but it could be start

我得到的错误是:不允许将 int 显式转换为日期。

然后我试了这个:

SELECT DATEADD(SECOND, TimeKey, CAST(CAST(DateKey AS VARCHAR(8)) AS DATETIME))

这只是产生了错误的结果。我不确定为什么,但这是错误的。我只想将 datekey 和 timekey 组合成 datetime。我的格式是整数形式的 YYYYMMDD 和 HHMMSS。我需要日期时间。

SQL 服务器允许您将 datetime 个值相加。因此,您可以分别构造 datetime。这是一种方法:

select (convert(datetime, convert(varchar(255), date_key)) +
        convert(datetime, timefromparts(time_key / 10000, (time_key / 100) % 100, time_key % 100, 0, 0))
       ) as dt
from (values (20200430, 103500)) v(date_key, time_key);

Here 是一个 db<>fiddle.

您需要将数值转为无歧义的格式,然后进行转换。您可以使用 STUFF 将所需的 :- 字符注入:

SELECT CONVERT(datetime2(0),STUFF(STUFF(STUFF(STUFF(CONCAT(datekey,'T',RIGHT('000000' + timekey,6)),14,0,':'),12,0,':'),7,0,'-'),5,0,'-'),126)
FROM (VALUES(20200430,103500))V(datekey,timekey);