Skip to Content.
Sympa Menu

freetds - Re: [freetds] MONEY type support??

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "Lowden, James K" <james.k.lowden AT alliancebernstein.com>
  • To: "FreeTDS Development Group" <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] MONEY type support??
  • Date: Fri, 15 Dec 2006 17:44:45 -0500

> From: Sokol, Ryan - 244
> Sent: Friday, December 15, 2006 1:43 PM
>
> I ran both of your queries through tsql and isql (unixODBC's tool)
> on my Linux box and saw the rounding problem.

I'm not sure I'd call it a "problem". It could be a feature, letting
you not round things off to the nearest penny. "Money" doesn't usually
imply fractions of a penny; if you need that, you need a floating point
or exact numeric type.

> What case were you
> in to not see the rounding?

I used Microsoft's osql.exe and Query Analyzer. It seems they do not
round MONEY types when converting them to strings. Microsoft's isql.exe
rounds to 2 places.

I want to emphasize this is not standardized. T-SQL itself rounds to
two positions:

1> select cast(cast(.116 as money) as varchar(30))
2> go

------------------------------
0.12

One way around it, as you observed, is to convert to NUMERIC first.

> Unfortunately, it looks like everything from FreeTDS in ODBC mode
> automatically gets converted to a string.

No, the driver certainly doesn't convert anything unless asked. Likely
you're seeing PHP behavior, about which I don't know very much.

--jkl


>
> -----Original Message-----
> From: freetds-bounces AT lists.ibiblio.org
> [mailto:freetds-bounces AT lists.ibiblio.org] On Behalf Of Lowden,
> James K
> Sent: Friday, December 15, 2006 12:34 PM
>
> > From: Sokol, Ryan - 244 Sent: Friday, December 15, 2006 12:49 PM
> >
> > I am using the latest version of FreeTDS with unixODBC and PHP
> > 5.1.4. For some reason, columns of type MONEY from my MS SQL
> > Server 2005 are being rounded. For example, the value 0.195 is
> > being rounded to 0.20. But DECIMAL types are ok.
>
> I think you mean when you SELECT something of type MONEY and convert
> it to a string?
>
> It looks like that's FreeTDS's behavior. Microsoft's isql.exe does
> the same thing.
>
> 1> select cast(.116 as money) 2> go
>
> ------------------------
> 0.12
>
> I note their ODBC tools don't round.
>
> 1> select cast(.116 as smallmoney) 2> go
>
> ------------
> .1160

-----------------------------------------
The information contained in this transmission may be privileged and
confidential and is intended only for the use of the person(s) named
above. If you are not the intended recipient, or an employee or agent
responsible
for delivering this message to the intended recipient, any review,
dissemination,
distribution or duplication of this communication is strictly prohibited. If
you are
not the intended recipient, please contact the sender immediately by reply
e-mail
and destroy all copies of the original message. Please note that we do not
accept
account orders and/or instructions by e-mail, and therefore will not be
responsible
for carrying out such orders and/or instructions. If you, as the intended
recipient
of this message, the purpose of which is to inform and update our clients,
prospects
and consultants of developments relating to our services and products, would
not
like to receive further e-mail correspondence from the sender, please "reply"
to the
sender indicating your wishes. In the U.S.: 1345 Avenue of the Americas, New
York,
NY 10105.





Archive powered by MHonArc 2.6.24.

Top of Page