SQL Server 将十进制解析为 DateTime

Qwe*_*rty 3 sql database sql-server datetime

我在 SQL Server 2017 中有一个表。在这个表中,日期存储为下一个格式的小数:

20180717164540.2200000

YYYYMMDDhhmiss.nnnnnnn

年份 4 位数字,日历月 2 位数字,一个月中的一天 2 位数字,UTC 中基于 24 小时制的小时的 2 位数字,一小时的 2 位数字,秒的 2 位数字一分钟和小数秒。

我的目标是将此格式转换为 DateTime 并将其存储在数据库中的另一个表中。所以我的问题是如何在 SQL Server 中将此格式转换为 DateTime 格式。据我所知,您无法像在 Oracle 中那样创建自定义日期格式。

我用FORMAT AND CONVERT MSSQL 函数尝试了很多次,但它不起作用。

SELECT FORMAT(CONVERT(NVARCHAR(22), DECIMALCOLUMN), 'YYYYMMDDhhmiss') FROM SOURCE-TABLE;
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

Eri*_*ndt 5

You were really close with your FORMAT idea. FORMAT gives you an NVARCHAR output, which you can explicitly CAST as a DATETIME2(7) (which maintains your precision level).

DECLARE @dateWannaBe DECIMAL(21,7) = 20180717164540.2200000;

SELECT CAST(FORMAT(@dateWannaBe,'####-##-## ##:##:##.#######', 'en-US') AS DATETIME2(7)) AS ActualDateTime2;

+-----------------------------+
|       ActualDateTime2       |
+-----------------------------+
| 2018-07-17 16:45:40.2200000 |
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)

编辑:根据@JeroenMostert 的评论,向 FORMAT 函数添加了文化参数。