Returning values with more than two digits to the right of the decimal point

How do I write a WHERE clause that will return only values that have more than two digits to the right of the decimal point (ie. 27.543)? The data type is decimal, length 9, precision 13, scale 6. This is a typical situation when you want a dollar figure that is exactly two decimal place to the right of the decimal. I hope this is not too easy.

    Requires Free Membership to View

When inputting a number as a decimal, MS SQL Server pads the end of the number with 0s to equal the number of places declared in the scale. In other words, 27.543 is really 27.543000. To get around this, find the number of digits between the decimal point and the first zero.

Example:

 declare @tbl_decimals table( dec_column dec(13, 6) ) insert into @tbl_decimals values(123.1) insert into @tbl_decimals values(1234.12) insert into @tbl_decimals values(12345.123) insert into @tbl_decimals values(1234.1234) select * from @tbl_decimals WHERE len(left(right(dec_column, 6), charindex('0', right(dec_column, 6)) - 1)) > 2 /* The number "6" should be replaced with the number indicated as the scale dec(precision, scale)*/

 

For More Information

This was first published in March 2002

Join the conversationComment

Share
Comments

    Results

    Contribute to the conversation

    All fields are required. Comments will appear at the bottom of the article.