但是这又报错了类型int发生算术溢出错误,值=1689147000166.000000
时间: 2024-02-10 21:24:57 浏览: 130
对不起,我之前给出的答案有误。在 SQL Server 中,整数类型 `bigint` 的最大值是 9223372036854775807,而你提供的时间戳值 1689147000166 超出了该范围,因此导致了算术溢出错误。
为了处理这个问题,你可以将时间戳值先转换为 `datetimeoffset` 数据类型,然后再进行进一步的处理。以下是一个示例:
```sql
DECLARE @timestamp bigint = 1689147000166
DECLARE @epoch datetimeoffset = '1970-01-01T00:00:00.0000000Z'
SELECT DATEADD(ms, @timestamp % 1000, DATEADD(s, @timestamp / 1000, @epoch)) AS deadline
```
在上面的示例中,我们首先声明了一个变量 `@timestamp` 并将其设置为时间戳值 1689147000166。然后,我们声明了另一个变量 `@epoch` 并将其设置为 Unix 时间戳的起始时间 `'1970-01-01T00:00:00.0000000Z'`。
接下来,我们使用 `DATEADD()` 函数将毫秒数(通过取时间戳除以 1000 的余数获得)和秒数(通过取时间戳除以 1000 的商获得)添加到起始时间 `@epoch`,从而得到具体的日期时间值。
请注意,`datetimeoffset` 数据类型可以存储日期时间和与之关联的时区信息。如果你不需要时区信息,可以使用 `datetime` 数据类型进行转换。
阅读全文