执行时显示以下错误
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.
执行时显示以下错误
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.
您的问题是您正在尝试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);
当您尝试将数值类型转换为 adatetime
时,SQL Server 会尝试将数值作为天数添加到日期01-Jan-1900
。在您的情况下,这是试图增加数百万天,因此会出现溢出错误。
CONVERT
如果您愿意,也可以正常工作:
select yr_mnth_dt = convert(datetime, convert(char(8), @yr_mnth_dt));
我只看到了用于字符串的转换。我无法轻易判断它是否设计用于处理数字。您可以将数字转换为字符串,然后将字符串转换为日期。但是,我个人只会使用DATEFROMPARTS
:
SELECT DATEFROMPARTS(@yr_mnth_dt / 10000,
(@yr_mnth_dt / 100) % 100,
@yr_mnth_dt % 100) AS YR_MNTH_DT
为什么是数字?尝试这个
declare @yr_mnth_dt as varchar(10);
set @yr_mnth_dt = '20130822';
select convert(datetime,@yr_mnth_dt,112) as YR_MNTH_DT