错误: COALESCE 的类型 character varying 和 integer 不匹配
时间: 2023-05-11 22:05:50 浏览: 103
这个错误提示是因为 COALESCE 函数的参数类型不匹配,它要求所有参数的类型必须一致。在这个例子中,COALESCE 函数的参数包含一个 character varying 类型的参数和一个 integer 类型的参数,因此出现了类型不匹配的错误。要解决这个问题,需要将参数类型转换为一致的类型,或者使用其他函数来处理这个问题。
相关问题
错误: 函数 round(double precision, integer) 不存在 LINE 6: ROUND( SUM ( COALESCE ( jzmj, 0 ) ) / 10000, 2 ) AS totalar... ^ HINT: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
这个错误提示是因为在PostgreSQL中,round()函数的参数与MySQL中的round()函数略有不同。在PostgreSQL中,round()函数的第一个参数是数值类型,第二个参数是整数类型,表示要保留的小数位数。因此,在您的语句中,需要将第二个参数2改为整数类型,即2::integer。修改后的语句如下所示:
```
SELECT LEFT(jdxz, 9) AS street,
LEFT(jdxz, 6) AS qx,
'swqc' AS TYPE,
COUNT(*) AS totalnum,
ROUND(SUM(COALESCE(jzmj, 0))/10000, 2)::numeric AS totalarea,
NOW() AS updatedate
FROM swqc_house_base_info
WHERE jdxz IS NOT NULL
AND deletemark = '0'
AND (yhwt = '1' OR wfjs = '1' OR wfwgsp = '1')
GROUP BY jdxz;
```
在这个修改后的语句中,将ROUND函数中的第二个参数2改为了2::integer,同时使用了::numeric类型转换,将结果转换为numeric类型,以保证计算结果的精度和类型。
postgresql 无效的类型 integer 输入语法: ""
根据你提供的SQL查询语句,看起来问题出在你的SELECT语句中的xhd::INTEGER这一行。这个错误通常是由于尝试将一个空字符串转换为整数类型所导致的。
在你的查询中,当C.carton_num不符合'CICU%'或'NCSE%'的条件时,xhd列可能会返回空字符串。然后尝试将空字符串转换为整数类型时,就会出现"无效的类型 integer 输入语法: ''"的错误。
为了解决这个问题,你可以使用NULLIF函数将空字符串转换为NULL值,然后再使用COALESCE函数将NULL值转换为适当的默认值。下面是一个示例:
```sql
CASE
WHEN C.carton_num LIKE 'CICU%' THEN (SUBSTRING(C.carton_num, 5, 6))::INTEGER
WHEN C.carton_num LIKE 'NCSE%' THEN (SUBSTRING(C.carton_num, 8, 6))::INTEGER
ELSE NULL
END AS xhd
...
COALESCE(xhd, 0) AS xhd_integer
```
在上面的示例中,如果xhd列为空值(即不符合'CICU%'和'NCSE%'条件),它将被转换为NULL。然后,使用COALESCE函数将NULL值转换为默认值0。
请根据你的实际情况进行相应的更改,并重新运行查询。如果你需要进一步的帮助,请提供更多关于表结构和数据类型的信息。