SQL 错误:ORA-00932:不一致的数据类型:预期的 CHAR 得到了 NUMBER
Posted
技术标签:
【中文标题】SQL 错误:ORA-00932:不一致的数据类型:预期的 CHAR 得到了 NUMBER【英文标题】:SQL Error: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 【发布时间】:2013-11-10 00:44:00 【问题描述】:每次它给我一个空结果时,我都试图得到一个结果“无”。现在它给我一个 0 的空结果。对于空结果,我怎么能有一行显示“无”而不是 0。
我已尝试使用 TO_CHAR 和 TO_NUMBER 作为总和,但无法显示“无”...
CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END AS ENROLLED
所以当尝试上述操作时,我得到
这就是我所拥有的
SELECT lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME, CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END AS ENROLLED
FROM STUDENT lt
LEFT OUTER JOIN
(SELECT s.STUDENT_ID, e.ENROLL_DATE,COUNT(z.COURSE_NO)AS ENROLLED
FROM STUDENT s
LEFT JOIN ENROLLMENT e ON s.STUDENT_ID = e.STUDENT_ID
LEFT JOIN SECTION z ON e.SECTION_ID = z.SECTION_ID
WHERE s.PHONE LIKE '702%'
GROUP BY s.STUDENT_ID, e.ENROLL_DATE) rt
ON lt.STUDENT_ID = rt.STUDENT_ID
WHERE lt.PHONE LIKE '702%'
GROUP BY lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME,ENROLLMENTS;
而不是拥有
STUDENT_ID FIRST_NAME LAST_NAME ENROLLED
---------- ------------------------- ------------------------- -----------
253 Walter Boremmann 1
396 James E. Norman 0
etc
我想要这样的
STUDENT_ID FIRST_NAME LAST_NAME ENROLLED
---------- ------------------------- ------------------------- -----------
253 Walter Boremmann 1
396 James E. Norman none
【问题讨论】:
【参考方案1】:尝试使用函数:COALESCE (cast(sum(expr1) as varchar), 'none')
作为旁注,我质疑您在查询中使用 DISTINCT。
【讨论】:
所以我做了 COALESCE(TO_CHAR(SUM(ENROLLED)),'none') ENROLLED 这给了我想要的总和,但它没有显示'none'... 它在显示什么? Coalesce 使用 NULL 而非零。这意味着它总是返回 SUM(ENROLLED)。【参考方案2】:CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END AS ENROLLED
这会返回不同的类型。使其相同(将 SUM 转换为字符串)
【讨论】:
【参考方案3】:错误是正常的,因为你的命令
CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END AS ENROLLED
使用与字符串 'none' 和数字 SUM(ENROLLED) 相同的列
您可以将列用作字符串并使用同时显示数字
CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE TO_CHAR(SUM(ENROLLED)) END AS ENROLLED
【讨论】:
【参考方案4】:试试这个:
COALESCE(to_char(sum(expr1)), 'none')
这应该可以在不使用 cast 和 varchar 的情况下工作。
【讨论】:
以上是关于SQL 错误:ORA-00932:不一致的数据类型:预期的 CHAR 得到了 NUMBER的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB
Oracle Open Cursor for Using 给出错误 ORA-00932:不一致的数据类型
查找错误 ORA-00932:不一致的数据类型:预期的 DATE 得到了 NUMBER
java.sql.SQLException:ORA-00932:不一致的数据类型:预期 DATE 在插入 Null 时间戳时得到 BINARY