11. december 2002 - 11:33 Der er 6 kommentarer og
1 løsning

Arithmetic overflow error converting expression to data type int.

Jeg har følgende sql-sætning i server 7.0:

<b>select sum(outbound) from be_general where day>='2002-11-1' and day<='2002-11-12';</b>

Sætningen giver overflow fordi resultatet af summen ikke kan ligge i en 4 bytes integer. Resultatet er iøvrigt 2.237.476.000. Det får man hvis man lige dividerer med 1000 først.

Jeg har forsøgt med CAST og CONVERT og konverterer/caste resultatet til en bigint, men får altid svaret, at den ikke er iblandt systemtyperne.

Derefter har jeg så forsøgt at ændre datatypen på 'outbound' feltet til en datatype som kan rumme tallet, men der findes ikke rigtig nogen.

Hvad skal jeg gøre for at få svaret 2.237.476.000 ud af sql-sætningen?
Avatar billede bennytordrup Nybegynder
11. december 2002 - 11:39 #1
Hvad hvis du caster outbound til en decimal?

select sum(cast outbound as decimal(19,2)) from be_general where day>='2002-11-1' and day<='2002-11-12'
11. december 2002 - 11:48 #2
Tak for det! Jeg har aldrig brug CAST før, men du viste mig næsten hvordan. Med en lille rettelse fik jeg det til at virke:

select sum(cast (outbound as numeric)) from be_general where day>='2002-11-1' and day<='2002-11-12'

Der manglede bare et par parenteser og derudover castede jeg til numeric da decimalerne er ligegyldige.
Avatar billede bennytordrup Nybegynder
11. december 2002 - 11:55 #3
Sorry, jeg kunne ikke tælle paranteser :-/

Hvis decimalerne er ligegyldige, kunne du også bruge decimal(19,2). I øvrigt er Numeric og decimal funktionelt ens.
Avatar billede bennytordrup Nybegynder
11. december 2002 - 11:57 #4
En anden ting med din SQL:

Hvis du sammenligner med dato-konstanter på den måde, du gør, så brug ISO formatet for datoer:

select sum(cast (outbound as numeric)) from be_general where day>='20021101' and day<='20021112'

ISO-formatet genkendes altid af SQL Server uanset sprogindstillinger på serveren. Med dit datoformat kunne du risikere at rende ind i problemer med datoer efter den 12. i måneden.
11. december 2002 - 11:58 #5
Altså skal jeg bare slette bindestregerne i datoen?
Avatar billede bennytordrup Nybegynder
11. december 2002 - 11:58 #6
Problemet ville være, at du angiver datoer på formatet yyyy-mm-dd. Det vil fejle, hvis serveren forventer at få datoen på formatet yyyy-dd-mm, og datoerne er efter den 12.

ISO-formatet er yyyymmdd.
Avatar billede bennytordrup Nybegynder
11. december 2002 - 11:59 #7
Du skal bruge datoformatet yyyymmdd
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester