sql - 尝试在 SQL Server 中将小数转换为日期时间
问题描述
我有一个在 SQL Server 中将日期保存为小数的应用程序,我需要将它们转换回来,但我无法弄清楚它是如何完成的。
对于 2018 年 11 月 5 日,它将其转换为 636769332000000000
对于 2018 年 11 月 7 日,它将其转换为 636771060000000000
我认为它是自给定日期以来的时间间隔计数,但没有任何作用。有没有人遇到过这样的事情?
解决方案
如果是 .NET 刻度,您可以使用整数运算简单地提取天、秒和纳秒并将它们添加到纪元 ( 0001-01-01 00:00:00.00 UTC
)。它必须一步一步完成,因为DATEADD
只能添加INT
值。
DECLARE @t TABLE (ticks BIGINT);
INSERT INTO @t VALUES
(636769332000000000),
(636771060000000000),
(636771060009999999);
-- current time test, requires SQL 2016+
INSERT INTO @t VALUES
(DATEDIFF_BIG(MICROSECOND, '0001-01-01', SYSUTCDATETIME()) * 10);
SELECT *, DATEADD(NANOSECOND, u, DATEADD(SECOND, s, DATEADD(DAY, d, CAST('0001-01-01' AS DATETIME2)))) AS thatdate
FROM @t AS t
CROSS APPLY (
SELECT
ticks / CAST(864000000000 AS BIGINT),
ticks % CAST(864000000000 AS BIGINT) / 10000000,
ticks % 10000000 * 100
) AS ca(d, s, u)
结果:
| ticks | d | s | u | thatdate |
|--------------------|--------|-------|-----------|-----------------------------|
| 636769332000000000 | 737001 | 46800 | 0 | 2018-11-04 13:00:00.0000000 |
| 636771060000000000 | 737003 | 46800 | 0 | 2018-11-06 13:00:00.0000000 |
| 636771060009999999 | 737003 | 46800 | 999999900 | 2018-11-06 13:00:00.9999999 |
| 636770194571454440 | 737002 | 46657 | 145444000 | 2018-11-05 12:57:37.1454440 |
推荐阅读
- php - WordPress 版本更新后无法下载 CSV
- junit - 带有 Mockito 的 Powermock - 依赖问题
- django - 在自定义 django 查询集中使用自定义模型方法
- python-3.x - 在 Python 中构建 RFQ 聊天机器人的步骤
- c++ - 奇怪的浮点异常c++(指针赋值)
- c - 在 C 中搜索子字符串
- python - 如何在我的 Django 模板上删除“未设置密码”以编辑个人资料
- java - 为什么合并排序可以两次比较两个项目?
- android - MPAndroidChart - 如何一次只查看少量数据
- javascript - 解析多级 JSON 输出 Javascript