Formatting Numeric Value in Computed Column
Formatting Numeric Value in Computed Column
am 13.01.2008 00:09:11 von nospam
Hi there --
I'm writing a SQL query that works something like this:
SELECT a, b, a/b AS col_name FROM TABLE
Dividing a by b can result in a value above or below 1, e.g. 1.234 or 0.123.
If the value is below 1, I don't want the preceding zero, e.g. .123.
I've been using a STR() function to format it to three decimal points, e.g.:
STR(a/b, 5, 3) AS col_name
.... but for values below 1 it'll look like 0.123.
Any suggestions for how I can make this look like .123?
Thanks in advance.
Re: Formatting Numeric Value in Computed Column
am 13.01.2008 00:23:22 von Tom van Stiphout
On Sat, 12 Jan 2008 23:09:11 GMT, nospam@nospam.com (Stephen C. Smith)
wrote:
Best to deal with that in the presentation layer, not in the data
layer.
-Tom.
>Hi there --
>
>I'm writing a SQL query that works something like this:
>
>SELECT a, b, a/b AS col_name FROM TABLE
>
>Dividing a by b can result in a value above or below 1, e.g. 1.234 or 0.123.
>
>If the value is below 1, I don't want the preceding zero, e.g. .123.
>
>I've been using a STR() function to format it to three decimal points, e.g.:
>
>STR(a/b, 5, 3) AS col_name
>
>... but for values below 1 it'll look like 0.123.
>
>Any suggestions for how I can make this look like .123?
>
>Thanks in advance.
Re: Formatting Numeric Value in Computed Column
am 13.01.2008 11:39:42 von Erland Sommarskog
Stephen C. Smith (nospam@nospam.com) writes:
> I'm writing a SQL query that works something like this:
>
> SELECT a, b, a/b AS col_name FROM TABLE
>
> Dividing a by b can result in a value above or below 1, e.g. 1.234 or
> 0.123.
>
> If the value is below 1, I don't want the preceding zero, e.g. .123.
>
> I've been using a STR() function to format it to three decimal points,
> e.g.:
>
> STR(a/b, 5, 3) AS col_name
>
> ... but for values below 1 it'll look like 0.123.
>
> Any suggestions for how I can make this look like .123?
As Tom says, this is typically thing you should handle client-side. But
some times the only client is Query Analyzer or Mgmt Studio, in which case
that get kind of difficult.
You could do this:
SELECT a, b,
CASE WHEN b = 0 THEN NULL
WHEN abs(a) >= abs(b) THEN ltrim(str(a/b, 10, 3))
WHEN sign(a*b) = 1
THEN substring(ltrim(str(a/b, 10, 3)), 2, 10)
WHEN sign(a*b) = -1
THEN substring(ltrim(str(a/b, 10, 3)), 3, 10)
END
FROM tbl
Note: this is untested.
--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downlo ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books .mspx
Re: Formatting Numeric Value in Computed Column
am 13.01.2008 20:16:03 von Plamen Ratchev
Another alternative is using something like this:
SELECT REPLACE(' ' + STR(a/NULLIF(b, 0), 5, 3), ' 0.', '.') AS col_name
FROM TABLE
HTH,
Plamen Ratchev
http://www.SQLStudio.com
Re: Formatting Numeric Value in Computed Column
am 13.01.2008 20:40:19 von Plamen Ratchev
Forgot to note that if negatives are expected, then it needs one more nested
REPLACE:
SELECT REPLACE(REPLACE(' ' + STR(a/NULLIF(b, 0), 5, 3), ' 0.', '.'), '-0.',
'-.') AS col_name
FROM TABLE
Plamen Ratchev
http://www.SQLStudio.com
Re: Formatting Numeric Value in Computed Column
am 14.01.2008 01:00:04 von nospam
Thanks everyone who responded. You helped a lot. Those who said to resolve it
in the presentation layer were right. I was writing the front-end in ASP.NET
but couldn't find information on the DataFormatString variable to format it the
way I want. I finally found a site which showed how to do a custom format:
{0:#.000}
.... and that did the trick.
I wasn't able to find any information before on custom formats, which was why I
was trying to do it in SQL Server.
Again, thank you to everyone who stepped forward to help.
Stephen
On Sat, 12 Jan 2008 23:09:11 GMT, nospam@nospam.com (Stephen C. Smith) wrote:
>Hi there --
>
>I'm writing a SQL query that works something like this:
>
>SELECT a, b, a/b AS col_name FROM TABLE
>
>Dividing a by b can result in a value above or below 1, e.g. 1.234 or 0.123.
>
>If the value is below 1, I don't want the preceding zero, e.g. .123.
>
>I've been using a STR() function to format it to three decimal points, e.g.:
>
>STR(a/b, 5, 3) AS col_name
>
>... but for values below 1 it'll look like 0.123.
>
>Any suggestions for how I can make this look like .123?
>
>Thanks in advance.