13

执行时显示以下错误

declare @yr_mnth_dt as numeric;
set @yr_mnth_dt = 20130822;
select convert(datetime,@yr_mnth_dt,112) as YR_MNTH_DT

错误显示

Arithmetic overflow error converting expression to data type datetime.
4

3 回答 3

20

您的问题是您正在尝试convert将数字转换为 a datetime,而这不起作用。

你需要numeric先把你变成一个字符串:

declare @yr_mnth_dt as numeric;
set @yr_mnth_dt = 20130822;

select yr_mnth_dt = cast(cast(@yr_mnth_dt as char(8)) as datetime);

SQL Fiddle 与演示

当您尝试将数值类型转换为 adatetime时,SQL Server 会尝试将数值作为天数添加到日期01-Jan-1900。在您的情况下,这是试图增加数百万天,因此会出现溢出错误。

CONVERT如果您愿意,也可以正常工作:

select yr_mnth_dt = convert(datetime, convert(char(8), @yr_mnth_dt));

SQL Fiddle 与演示

于 2013-08-24T11:07:18.120 回答
3

我只看到了用于字符串的转换。我无法轻易判断它是否设计用于处理数字。您可以将数字转换为字符串,然后将字符串转换为日期。但是,我个人只会使用DATEFROMPARTS

SELECT DATEFROMPARTS(@yr_mnth_dt / 10000, 
                     (@yr_mnth_dt / 100) % 100,
                     @yr_mnth_dt % 100) AS YR_MNTH_DT
于 2013-08-24T10:38:49.117 回答
2

为什么是数字?尝试这个

declare @yr_mnth_dt as varchar(10);
set @yr_mnth_dt = '20130822';
select convert(datetime,@yr_mnth_dt,112) as YR_MNTH_DT
于 2013-08-24T15:29:05.527 回答