Невозможно преобразовать значение символа в деньги в SQL - PullRequest
0 голосов
/ 10 января 2019

У меня есть таблица с названием «companyInfo», а тип данных «Amount» равен nvarchar, а пример данных выглядит так:

CompanyInfo

IDs | company   | year | Amount
----+-----------+------+-------
1   | Company A | 2011 | 40.00
2   | Company B | 2011 | Null
2   | Company C | 2011 | 100.00
4   | Company D | 2011 | 205.11
5   | Company E | 2011 | 0
6   | Company F | 2011 | Null

Я написал запрос, как показано ниже:

select IDs
  , company
  , sum(ISNULL(CAST(Amount AS MONEY), 0)) Amount
  , year
from companyInfo 
where Amount is not null 
  and year(cast(year as date)) = '2018'
group by IDs
  , company
  , Amount
  , year

получил ниже Ошибка:

Ошибка:
Сообщение 235, Уровень 16, Состояние 0, Строка 27 Невозможно преобразовать значение символа в деньги. Значение char имеет неверный синтаксис.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Это то, что вы хотите .. Оба запроса дают одинаковые результаты

Стиль 1

SELECT IDs
    ,Company
    ,FORMAT(YearFormed, 'yyyy') AS YearFormed
    ,Amount

FROM
(SELECT C.IDs, C.Company, CONVERT(DATE, C.YearFormed) AS YearFormed, CONVERT(MONEY, C.Amount) AS Amount FROM temp.dbo.CompanyInfo AS C) AS RC
WHERE Amount IS NOT NULL

Стиль 2

WITH RESULT AS --3-I named this query with the intention to formart the Year in which the companies were formed
(
SELECT IDs --1-Started from here
    ,Company
    ,CONVERT(DATE, C.YearFormed) AS YearFormed --2-I converted to Date here so I couldnt run format too so
    ,CONVERT(MONEY, C.AMOUNT) AS Amount
FROM temp.dbo.CompanyInfo AS C
WHERE C.AMOUNT IS NOT NULL
)
SELECT R.IDs 
    ,R.Company
    ,FORMAT(R.YearFormed, 'yyyy') AS YearFormed --4-I used this SELECT statement only to format this column
    ,R.Amount
FROM RESULT AS R

Вот что получается в результате

enter image description here

0 голосов
/ 10 января 2019

Возможно, это из-за ваших региональных настроек. Пожалуйста, уточните:

select
     IDs
     ,company
     ,sum(ISNULL(CAST(REPLACE(Amount, '.', ',') AS MONEY),0)) Amount
     ,year

from companyInfo 
    where Amount is not null 
    and year(cast(year    as date)) = '2018' 
    group by IDs,company,Amount,year;

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

SELECT CAST(REPLACE('205.11', '.', ',') AS MONEY),0)

Или

SELECT CAST('205.11'AS MONEY)

Чтобы выделить проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...