| 項目 | バージョン |
|---|---|
| PostgreSQL | 14.10 |
| OS | Ubuntu 22.04 |
「Money」型を数値のように扱おうとして以下のSQLを実行したところ、タイトルのエラーとなりました。
SELECT
SUM(CASE B."TRANSACTIONTYPE" WHEN 0 THEN A."AMOUNT" ELSE 0 END) AS INCOMETOTAL,
SUM(CASE B."TRANSACTIONTYPE" WHEN 1 THEN A."AMOUNT" * -1 ELSE 0 END) AS EXPENSETOTAL
FROM
"RECORDS" A,
"CATEGORIES" B
WHERE
A."TRANSACTIONDATE" BETWEEN '2024/01/01' AND '2024/01/31'
AND A."ACCOUNTID" = 1
AND A."CATEGORYID" = B."ID"
;
PostgreSQLでは内部的に「Money」型は「ロケール付きの文字列として保存されている」ようなので、対応としては数値型に変換する明示をしてやればよいようです。(「AMOUNT」の後に「::NUMERIC」をつける)
SELECT
SUM(CASE B."TRANSACTIONTYPE" WHEN 0 THEN A."AMOUNT"::NUMERIC ELSE 0 END) AS INCOMETOTAL,
SUM(CASE B."TRANSACTIONTYPE" WHEN 1 THEN A."AMOUNT"::NUMERIC * -1 ELSE 0 END) AS EXPENSETOTAL
FROM
"RECORDS" A,
"CATEGORIES" B
WHERE
A."TRANSACTIONDATE" BETWEEN '2024/01/01' AND '2024/01/31'
AND A."ACCOUNTID" = 1
AND A."CATEGORYID" = B."ID"
;
コメントを残す