DECODE(INSTR(B.VALUE, '主诊断入组失败原因'), '1', B.VALUE,'') 错误 [22P02]: 错误: 无效的类型 integer 输入语法: "主诊断入组失败原因" 怎么解决
时间: 2023-11-28 13:04:53 浏览: 57
这个错误是因为在使用DECODE函数时,第一个参数应该是一个表达式,但是你输入的是一个字符串“主诊断入组失败原因”,导致函数无法运行。你可以尝试修改第一个参数,将其改为一个正确的表达式,或者检查一下你使用DECODE函数的上下文环境是否正确。
如果你想要使用INSTR函数来查找字符串中是否包含子串“主诊断入组失败原因”,可以使用如下的语法:
```
INSTR(B.VALUE, '主诊断入组失败原因') > 0
```
这样可以返回一个布尔值,表示字符串中是否包含该子串。如果包含,则DECODE函数返回B.VALUE的值,否则返回空字符串。
相关问题
DECODE(INSTR(B.VALUE, '主诊断入组失败原因'), '1', B.VALUE,'') SQL 错误 [22P02]: ERROR: invalid input syntax for type integer: "主诊断入组失败原因:传入数据格式出错请重新确认"
这个错误是因为在DECODE函数中,当第一个参数返回的值不是整数时,DECODE函数无法将其解释为整数类型,因此会导致类型转换错误。具体来说,在这个DECODE函数中,当INSTR函数无法找到'主诊断入组失败原因'字符串时,它会返回一个字符串,而不是一个整数。因此,在DECODE函数中将其作为整数来处理将会导致类型转换错误。
要解决这个问题,您可以先使用一个IF函数或CASE语句来检查INSTR函数是否找到了'主诊断入组失败原因'字符串,然后根据情况返回相应的值。例如,以下是使用CASE语句的示例:
```sql
SELECT CASE WHEN INSTR(B.VALUE, '主诊断入组失败原因') > 0
THEN B.VALUE
ELSE ''
END AS result
FROM my_table B;
```
在上面的示例中,首先使用INSTR函数检查B.VALUE列中是否包含'主诊断入组失败原因'字符串。如果找到了该字符串,就返回B.VALUE的值;否则返回空字符串。通过这种方式,就可以避免类型转换错误。
DECODE(INSTR(B.VALUE, '主诊断分组成功'), '1', '已入组', B.VALUE, '', 'DRG无结果', '未入组') 错误 [22P02]: 错误: 无效的类型 integer 输入语法: "DRG无结果"
这个错误是由于在 PG 数据库的 DECODE 函数中,你试图将一个字符串类型的值 "DRG无结果" 作为一个整数类型的值使用,导致类型不匹配,从而引发了错误。DECODE 函数需要指定每个可能的输入值以及对应的输出值,因此你需要确保输入值和输出值的数据类型相匹配。
如果你需要将字符串类型的值作为输出值,你可以使用两个单引号 '' 来表示空字符串,而不是使用 "DRG无结果"。例如,如果你想要在 DECODE 函数中将空字符串作为输出值,你可以使用以下语句:
```sql
DECODE(INSTR(B.VALUE, '主诊断分组成功'), '1', '已入组', B.VALUE, '', '', '未入组')
```
这将返回空字符串,而不是 "DRG无结果"。如果你确实需要使用 "DRG无结果" 作为输出值,你需要将该值转换成整数类型的值,并将其作为 DECODE 函数的一个输出值。例如,你可以使用以下语句:
```sql
DECODE(INSTR(B.VALUE, '主诊断分组成功'), '1', '已入组', B.VALUE, NULL, 0, 'DRG无结果', '未入组')
```
这将返回整数类型的值 0,而不是 "DRG无结果"。如果你需要在结果中显示 "DRG无结果",你需要在查询结果中使用条件语句来将整数类型的值 0 转换成字符串类型的值 "DRG无结果"。
阅读全文