1. ホーム
  2. sql

[解決済み] SQLでchar値をmoneyに変換できない

2022-02-05 07:30:02

質問

companyInfo'というテーブルがあり、'Amount'のデータ型は次のとおりです。 nvarchar で、サンプルデータは以下のようなものです。

会社情報

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

以下のようなエラーが発生しました。

エラーです。
Msg 235, Level 16, State 0, Line 27 char 値を money に変換できません。char 値の構文が正しくありません。

どのように解決するのですか?

両方のクエリで同じ結果を得ることができます。

スタイル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

その結果、このような結果が得られます。