Как преобразовать varchar в десятичную, когда нет данных строки - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть оператор t-sql, который суммирует значения varchar путем преобразования их в десятичные дроби.Если значений не существует, возвращается 0.

Я получаю ошибку «Ошибка преобразования типа данных varchar в числовой».Это происходит только , когда данные результатов не возвращаются .

select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
//...multiple inner joins
//...and multiple filter criteria

Поскольку данных не существует, я думал о том, чтобы обойти подсчет выбора, чтобы определить, есть ли какие-либо данные.строки существуют, а затем сделать следующее утверждение.Есть ли лучшие решения для этого?

Ответы [ 5 ]

2 голосов
/ 06 декабря 2010

Все приведенные ниже ответы не работают, если НЕТ ДАННЫХ.Не удалось найти какой-либо другой способ выполнения, кроме как если бы существует.

Это было частью гораздо более крупного сценария sql, и эта конкретная часть обновляла временную таблицу.

if exists(select * from table inner join...where...)
being
    select sum(convert(decimal(28,8), isnull(myColumn, 0)))
    from myTable
    ...inner joins
    ...where clause
end

Обновление

Фактическая причина возникновения ошибки заключалась в предложении where, где происходило преобразование, и об ошибке в соединениях до запуска предложения where.Внутренние объединения возвращали нулевые значения.

1 голос
/ 06 декабря 2010

Ваш остров находится не в том месте.

sum(convert(decimal(28,8),isnull(myColumn,0)))

Преобразовать нулевое значение в 0, затем преобразовать в десятичную и, наконец, в сумму.

0 голосов
/ 06 декабря 2010

Я надеюсь, что этот запрос может помочь вам

select isnull(sum(convert(decimal(28,8),isnull(myColumn,0))), 0)
from myTable
0 голосов
/ 06 декабря 2010

Только для записи, некоторые предпочитают COALESCE:

sum(convert(decimal(28,8), COALESCE(myColumn,'0'))
0 голосов
/ 06 декабря 2010
sum(convert(decimal(28,8), isnull(myColumn,'0'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...