2016-03-08 3 views
0

У меня возникает проблема при попытке конвертировать мой запрос в формат валюты. Ниже приведен код, и при попытке конверсии на сумму «покупок» я получаю два разных сообщения об ошибках.Форматирование SQL-валюты

При использовании:

sum(case 
when trandate between '2015-01-01' and '2015-03-31' 
    then format(purchases, 'C', 'en-US') 
else 0 end) as q1 

Я получаю сообщение об ошибке 102

При использовании:

sum(case 
when trandate between '2015-01-01' and '2015-03-31' 
    then ('$' + CONVERT(varchar(12), purchases, 1)) 
else 0 end) as 'Q1 2015' 

Я получаю сообщение об ошибке 245.

Я не могу показаться, чтобы найти решение либо. Просто просто запрашивая данные на уровне строки и используя оба формата, я получаю возвращаемый $ xxx. Любая помощь будет принята с благодарностью.

Приветствия

+1

Какой вариант SQL вы используете? –

+0

Какова ваша СУБД? –

+0

MSSQL Standard 2014 – Mesa

ответ

1

при использовании выражения случае тип выражения данных, результат будет преобразован от одного к другому, чтобы тот же тип

case when trandate between '2015-01-01' and '2015-03-31' 
    then format(purchases, 'C', 'en-US') 
    else 0 
    end 

данных в приведенном выше выражении случае, у вас есть 2 различные типы данных в результат. Один - STRING, другой - INTEGER. SQL Server преобразует строку в целое. Который он не может и выкинет эту ошибку.

Вы должны выполнить форматирование значения в своем интерфейсном приложении, где отображается результат.

Если вы действительно должны были сделать это в T-SQL, изменить еще в '0'

else '0' 

EDIT 1:

Как есть SUM(), вы должны преобразовать после СУММ не раньше. Иначе вы будете применять SUM() в строке, которая также не работает.

format (
     SUM (case when trandate between '2015-01-01' and '2015-03-31' 
        then purchases -- format(purchases, 'C', 'en-US') 
        else 0 
        end) , 'C', 'en-US') 
+0

Я использовал else '0' в скрипте с такой же результат, используя сценарий, когда trandate между '2015-01-01' и '2015-03-31' затем форматирует (покупки, 'C', 'en-US') else 0 end – Mesa

+0

oh ... обратите внимание, что у вас есть SUM(). , , я подниму этот пост – Squirrel

+0

Отлично, вот что я искал. Спасибо! – Mesa

Смежные вопросы