Lors de l'exécution, l'erreur suivante s'affiche
declare @yr_mnth_dt as numeric;
set @yr_mnth_dt = 20130822;
select convert(datetime,@yr_mnth_dt,112) as YR_MNTH_DT
erreur montre
Arithmetic overflow error converting expression to data type datetime.
Votre problème est que vous essayez de convert
le numérique vers un datetime
, et cela ne fonctionne tout simplement pas.
Vous devez d'abord transformer votre numeric
en une chaîne:
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);
Lorsque vous essayez de convertir un type numérique en datetime
, SQL Server essaie d'ajouter la valeur numérique comme le nombre de jours à la date 01-Jan-1900
. Dans votre cas, cela tente d'ajouter des millions de jours, et donc l'erreur de débordement.
CONVERT
fonctionne aussi très bien, si vous préférez:
select yr_mnth_dt = convert(datetime, convert(char(8), @yr_mnth_dt));
Je n'ai vu que la conversion utilisée pour les chaînes. Je ne peux pas facilement dire s'il est même conçu pour fonctionner avec des chiffres. Vous pourriez convertir le nombre en une chaîne, puis la chaîne en une date. Cependant, j'utiliserais personnellement DATEFROMPARTS
:
SELECT DATEFROMPARTS(@yr_mnth_dt / 10000,
(@yr_mnth_dt / 100) % 100,
@yr_mnth_dt % 100) AS YR_MNTH_DT
Pourquoi numérique? Essaye ça
declare @yr_mnth_dt as varchar(10);
set @yr_mnth_dt = '20130822';
select convert(datetime,@yr_mnth_dt,112) as YR_MNTH_DT