Предполагая, что вы используете хотя бы SQL Server 2012, вы можете использовать TRY_PARSE()
SELECT
TRY_PARSE('-$5,000' AS MONEY),
TRY_PARSE('$5,000' AS MONEY)
'$-'
не будет анализироваться правильно, потому что это нонсенс. Сделайте замену этому, и вы должны быть хороши:
SELECT
CASE
WHEN val = '$-' THEN 0
ELSE TRY_PARSE(val AS MONEY)
END AS formatted_money