Postgresql 为什么我会遇到一个错误,即使在强制转换字段数据类型之后,我也无法连接两个不同的数据类型
我在postgresql中有一个查询,当transaction.type=2(指取款)时,我想在transactions.amount字段中添加一个减号。我正在尝试将减号和transactions.amount字段转换为int。我将transactions.amount字段转换为text/varchar,但无论发生什么,我仍然会收到错误,“PostgreSql错误:案例类型数字和文本无法匹配” 这是我正在运行的查询Postgresql 为什么我会遇到一个错误,即使在强制转换字段数据类型之后,我也无法连接两个不同的数据类型,postgresql,Postgresql,我在postgresql中有一个查询,当transaction.type=2(指取款)时,我想在transactions.amount字段中添加一个减号。我正在尝试将减号和transactions.amount字段转换为int。我将transactions.amount字段转换为text/varchar,但无论发生什么,我仍然会收到错误,“PostgreSql错误:案例类型数字和文本无法匹配” 这是我正在运行的查询 SELECT CAST(CASE WHEN "IsVoided" IS TRUE
SELECT CAST(CASE WHEN "IsVoided" IS TRUE THEN 0
WHEN "Transactions"."TransactionType" = 2
THEN CONCAT('-', CAST("Transactions"."Amount" AS TEXT))
ELSE "Transactions"."Amount" END AS Text) AS "TransAmount"
FROM "Transactions"
LEFT JOIN "DepositSources"
ON "Transactions"."DepositSourceId" =
"DepositSources"."DepositSourceId"
LEFT JOIN "WithdrawalSources"
ON "Transactions"."WithdrawalSourceId" =
"DepositSources"."DepositSourceId"
WHERE "Transactions"."FundId" = 4
AND "Transactions"."ReconciliationId" = 24
非常令人困惑的是,当我运行下面的查询时,它会按预期工作
从中选择CONCAT('-',CAST(“交易”,“金额”作为文本))
“交易”
CASE
表达式的所有分支都需要具有相同的类型。在这种情况下,您必须将所有分支设置为文本,因为接下来的只能是文本。请尝试以下版本:
CASE WHEN IsVoided IS TRUE
THEN '0'
WHEN Transactions.TransactionType = 2
THEN CONCAT('-', Transactions.Amount::text)
ELSE Transactions.Amount::text END AS TransAmount
请注意,在案例中使用逻辑是不常见的。通常,您只需检查单个列的值,而不是多个不同列的值
编辑:
似乎您对CONCAT
的调用主要用于负值。以下是一种更简单的方法:
CASE WHEN IsVoided IS TRUE
THEN 0
WHEN Transactions.TransactionType = 2
THEN -1.0 * Transactions.Amount
ELSE Transactions.Amount END AS TransAmount
在这种情况下,我们可以让case
表达式只生成数字输出,这可能就是您真正想要的