[SQL2005/XML] Probleem met valuta afronden

Pagina: 1
Acties:

  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 10:32
Ik heb een vraagje over een combinatie SQL 2005 - XML. Ik wil data uit een DB trekken, en deze omzetten naar XML. Ik gebruik de functie "FOR XML PATH" hiervoor. Alleen werkt het afronden van een valuta niet zoals ik wil...

De syntax die hiervoor gebruikt moet worden is deze:

(ROUND(SUM(OPBRENGST),2))
of
(ROUND(SUM(CAST(<FIELDNAME> AS MONEY)),2)) AS '@Bedrag'

Maar helaas werkt deze niet. Ik heb al ge-google-ed uiteraard, maar dat levert helaas ook niks op... :'(

Weet iemand hier misschien een oplossing voor dit probleem...?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Acid__Burn schreef op donderdag 08 maart 2007 @ 19:57:
Ik heb een vraagje over een combinatie SQL 2005 - XML. Ik wil data uit een DB trekken, en deze omzetten naar XML. Ik gebruik de functie "FOR XML PATH" hiervoor. Alleen werkt het afronden van een valuta niet zoals ik wil...

De syntax die hiervoor gebruikt moet worden is deze:

(ROUND(SUM(OPBRENGST),2))
of
(ROUND(SUM(CAST(<FIELDNAME> AS MONEY)),2)) AS '@Bedrag'
Hoezo @Bedrag?

Ik vermoed, maar da's effe uit de blote bol, het volgende: Round geeft gewoon een (afgeronde) float terug en geen stringrepresentatie van je waarde; daardoor zal op het moment dat de waarde in XML wordt gezet gewoon een float (en dus >2 decimalen) in je XML verschijnen. Je zult 'm even moeten casten naar een varchar ofzo om 'm met 2 decimalen in je XML te krijgen.
Acid__Burn schreef op donderdag 08 maart 2007 @ 19:57:
Maar helaas werkt deze niet. Ik heb al ge-google-ed uiteraard, maar dat levert helaas ook niks op... :'(
Als iets niet werkt dan horen we in PRG wel graag wat er niet werkt; een foutmelding of even vermelden wat er gebeurt en wat je dan verwacht had zou wel fijn zijn. "Het werkt niet" is zo breed he? ;)

Kijk ook even in onze PRG Quickstart hoe wij hier graag topics geopend zien worden ;)

[ Voor 32% gewijzigd door RobIII op 08-03-2007 21:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 10:32
RobIII,

Sorry voor de misschien onduidelijke post... Excuses hiervoor :D

AS '@Bedrag' zou weggelaten kunnen worden, maar dit is niet zo van belang.

Cast naar een char/varchar kan niet: Operand data type char is invalid for sum operator.

Hetgeen dat in de XML te zien is:

Bedrag="16.0000", terwijl dit Bedrag="16.00" moet zijn. De laatste 2 nullen staan er gewoon in, terwijl ik een ROUND uitvoer, met als toevoegen dat ik maar 2 getallen achter de komma wil zien...

Ik denk dat er iets fout gaat na de cast van het bedrag, en voor het omzetten naar XML. Hopelijk heeft iemand een oplossing!

[ Voor 7% gewijzigd door Acid__Burn op 08-03-2007 22:03 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Acid__Burn schreef op donderdag 08 maart 2007 @ 22:02:
Cast naar een char/varchar kan niet: Operand data type char is invalid for sum operator.
Laat me raden: je hebt Sum(Cast( gedaan i.p.v. Cast(Sum( ;)

En van een varchar kun je geen sum maken he? ;)
Acid__Burn schreef op donderdag 08 maart 2007 @ 22:02:
Bedrag="16.0000", terwijl dit Bedrag="16.00" moet zijn. De laatste 2 nullen staan er gewoon in, terwijl ik een ROUND uitvoer, met als toevoegen dat ik maar 2 getallen achter de komma wil zien...
Dat is precies wat ik zeg; je ziet nu een float/money i.p.v. een varchar die je wil hebben als je echt 2 decimalen wil hebben. Ik zie zowieso niet waarom die 2 extra nullen een probleem zijn, maar de oorzaak is nog steeds hetzelfde ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Het MONEY data type is fixed point, met 4 cijfers achter de komma...

Wil je 2 cijfers achter de komma, dan is bv. NUMERIC(15,2) een stuk handiger. ;)

[ Voor 38% gewijzigd door Verwijderd op 09-03-2007 01:04 ]


  • Acid__Burn
  • Registratie: Maart 2007
  • Laatst online: 10:32
RobIII,

Het spijt me om te zeggen... Je had inderdaad gelijk. Ik heb de CAST nu voor de SUM gezet, en dan werkt het. Dit topic gestart vanaf mijn werk gisteravond, en had er toen "pas" 14 werkuren opzitten. Daarom was ik niet helemaal wakker meer... Mijn schuld.

De oplossing is dus inderdaad:

,(CAST(SUM(<FIELDNAME>) AS VARCHAR)) AS '@Bedrag'

Topic kan gesloten worden. iig bedankt voor alle meedenkende collega's :D
Pagina: 1