我需要通过一些方法从SELECT命令的结果。它的工作时,它从表TenderItem一些列。但不工作,如果它从JSON类型列TenderItem.ItemInfo,F.E.一些关键
选择从 “ItemInfo” “TenderItem” 为了* - >> '名称'; - 在简单的工作选择
with sortingParams (columnName, isAsc) AS (VALUES ('ItemId', true))
select *
FROM "TenderItem" i, sortingParams
WHERE i."TenderId" = 1
AND i."ItemInfo" ->> 'Name' like '%Transcend%'
ORDER BY
case
WHEN columnName like '%ItemId%' THEN i."ItemId" --*work
WHEN columnName like '%ABCSegment%' THEN i."ItemInfo" ->> 'ABCSegment' --**
end desc;
**此字符串我有消息“ERROR:BIGINT和文字无法比拟的案例类型”
目前尚不清楚如何你对ItemInfo段ITEMID排序(除非这指向一个项目ID),因为它们是不是所有的文本值(如果它们都是文本,但有些是文本字符串,如“12345”,那么你不要使用文本排序从那时起“100”会来“99”)前。你可能希望他们能单独排序条件排序给予更大的灵活性:
with sortingParams (columnName, isAsc) AS (VALUES ('ItemId', true))
select *
FROM "TenderItem" i, sortingParams
WHERE i."TenderId" = 1
AND i."ItemInfo" ->> 'Name' like '%Transcend%'
ORDER BY
case
WHEN columnName like '%ItemId%' THEN i."ItemId"::bigint end asc nulls last --puts things with an itemID ahead of those without, or could use nulls first
--if two items have same item id, then sort by segment
, case
WHEN columnName like '%ABCSegment%' THEN i."ItemInfo" ->> 'ABCSegment'
end desc;
需要注意的是每个排序条件必须提供相同的数据类型进行评估每一行!这是给你的描述错误的情况下声明给出了一个项目Id咬和ItemInfo ->> 'ABCSegment'
文本值
项目Id是BIGINT
和i."ItemInfo" ->> 'ABCSegment'
是文本这是不兼容的类型做排序上。
尝试铸造价值明确地BIGINT
,即
..WHEN columnName like '%ABCSegment%' THEN (i."ItemInfo" ->> 'ABCSegment')::BIGINT
或者让我。“项目Id”一文,如果上述由于无效bigint
值失败。
i."ItemId"::TEXT