我在SQL Server 2017中有一个表。在此表中,日期以十进制存储为下一格式:
201807171645402200000
yyyymmddhhmiss.nnnnn年
一年4位数,一个日历月2位数,一个月的一天2位数,一天中基于24小时的一小时2位数(UTC),一小时的一分钟2位数,一分钟的秒2位数,以及小数秒。
我的目标是将此格式转换为datetime,并将其存储在数据库中的另一个表中。
所以我的问题是如何在sql server中将此格式转换为datetime格式。据我所知,您不能像在Oracle中那样创建自定义日期格式。
我试了很多次格式化和转换mssql函数,但都不行。
SELECT FORMAT(CONVERT(NVARCHAR(22), DECIMALCOLUMN), 'YYYYMMDDhhmiss') FROM SOURCE-TABLE;
谢谢你的帮助!
最佳答案
你真的很接近你的格式想法。格式为您提供nvarchar输出,您可以显式地将其转换为datetime2(7)(它保持您的精度级别)。
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 |
+-----------------------------+
编辑:根据@jeroenmostert的注释将区域性参数添加到format函数中。