Type列从BOOLEAN改为VARCHAR后SQL查询报错求助
问题原因与解决办法
核心问题:字符串常量的引号使用错误
在大多数SQL数据库(如PostgreSQL、Firebird等)中,双引号"用于标识数据库对象(列名、表名等标识符),而单引号'才用来表示字符串常量。你写的"Type" = "B"会被数据库解析为“将Type列与名为B的列进行比较”,而非“匹配Type列值为字符串B的行”。
错误对应分析
- 当你写
"Type" = "B"时:
数据库找不到名为B的列,但因为Type列原本是布尔类型,残留的隐式转换逻辑会尝试将现有字符串值(比如A)转换为布尔类型,触发Conversion error from string "A"。 - 当你写
"Type" = "A"或"Type" = "C"时:
数据库直接找不到名为A/C的列,所以抛出column unknown错误。
解决步骤
把查询中的字符串常量改用单引号包裹,修改后的SQL片段如下:
( SELECT SUM("Hours") FROM "Table" WHERE ( "Type" = 'B' AND "Active" = TRUE ) ) AS "Label",
额外注意事项
- 检查
Type列的数据:确保修改列类型后,所有数据都已转换为预期的字符串值(如'A'、'B'、'C'),避免残留原布尔类型的TRUE/FALSE值导致后续转换问题。 - 保持标识符的一致性:你用双引号包裹列名(如
"Hours"、"Table")是正确的(如果数据库区分大小写或标识符有特殊字符),但字符串常量必须用单引号。
内容的提问来源于stack exchange,提问作者hiigaran
相关产品推荐
相关产品推荐

