将 INT 转换为 DATETIME (SQL)

发布于 2024-09-26 03:59:35 字数 280 浏览 4 评论 0原文

我正在尝试将日期转换为日期时间,但出现错误。我要转换的数据类型是 (float,null),我想将其转换为 DATETIME。

该代码的第一行工作正常,但我在第二行收到此错误:

将表达式转换为数据类型日期时间时出现算术溢出错误。

CAST(CAST( rnwl_efctv_dt AS INT) AS char(8)),
CAST(CAST( rnwl_efctv_dt AS INT) AS DATETIME),

I am trying to convert a date to datetime but am getting errors. The datatype I'm converting from is (float,null) and I'd like to convert it to DATETIME.

The first line of this code works fine, but I get this error on the second line:

Arithmetic overflow error converting expression to data type datetime.

CAST(CAST( rnwl_efctv_dt AS INT) AS char(8)),
CAST(CAST( rnwl_efctv_dt AS INT) AS DATETIME),

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

幽蝶幻影 2024-10-03 03:59:35

您需要首先转换为 char 因为转换为 int 会将这些天添加到 1900-01-01

select CONVERT (datetime,convert(char(8),rnwl_efctv_dt ))

以下是一些示例

select CONVERT (datetime,5)

1900-01-06 00:00:00.000

select CONVERT (datetime,20100101)

会爆炸,因为您无法将 20100101 天添加到 1900-01- 01..你超出限制

首先转换为字符

declare @i int
select @i = 20100101
select CONVERT (datetime,convert(char(8),@i))

you need to convert to char first because converting to int adds those days to 1900-01-01

select CONVERT (datetime,convert(char(8),rnwl_efctv_dt ))

here are some examples

select CONVERT (datetime,5)

1900-01-06 00:00:00.000

select CONVERT (datetime,20100101)

blows up, because you can't add 20100101 days to 1900-01-01..you go above the limit

convert to char first

declare @i int
select @i = 20100101
select CONVERT (datetime,convert(char(8),@i))
知足的幸福 2024-10-03 03:59:35

试试这个:

select CONVERT(datetime, convert(varchar(10), 20120103))

Try this:

select CONVERT(datetime, convert(varchar(10), 20120103))
凉薄对峙 2024-10-03 03:59:35

一个更简单、可能更快的解决方案是使用 DATEFROMPARTS 和一些算术。

DECLARE @v bigint = 20220623;
SELECT DATEFROMPARTS(@v / 10000, @v / 100 % 100, @v % 100);
结果
2022-06-23

db<>fiddle

A simpler, and possibly faster solution is to use DATEFROMPARTS and a bit of arithmetic.

DECLARE @v bigint = 20220623;
SELECT DATEFROMPARTS(@v / 10000, @v / 100 % 100, @v % 100);
Result
2022-06-23

db<>fiddle

不如归去 2024-10-03 03:59:35

在该字段上使用 where 子句来忽略空值和零值

update
    table
set
    BDOS= CONVERT(datetime, convert(char(8), field))
where 
    isnull(field,0)<>0

use a where clause on that field to ignore nulls and zero values

update
    table
set
    BDOS= CONVERT(datetime, convert(char(8), field))
where 
    isnull(field,0)<>0
送你一个梦 2024-10-03 03:59:35
Convert(VARCHAR(10), CAST(CONVERT(char(8), "Replace with you date") as date), 101) "Your alias"
Convert(VARCHAR(10), CAST(CONVERT(char(8), "Replace with you date") as date), 101) "Your alias"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文