Interesting use of PARSENAME although its application is not well suited to the removal of decimal 'precision'.
First, as already pointed out by Erik, it relies on the PARSEd object containing a '.' so you'd need to perform something similar to COALESCE(PARSENAME('$12,345', 2), PARSENAME('$12,345', 1)) to handle cases where it does not.
Second, there are globalisation issues. In Spain, for example, number formats take the form 12.345,00 ie '.' is a thousands separator while ',' is a decimal separator so in a Spainish locale, the solution would return '$12' !
That said, without knowing more about how PARSENAME is implemented under the covers, I'll keep this trick in mind. It could work well to parse IP numbers or other strictly formed numeric strings which are not affected by the issues cited above.
commented on Jul 23 2012 4:00AM