CAST CASE语句超出限制

时间:2019-02-20 17:33:57

标签: sql casting case cognos tidy

我想构建一个报告,使我的工作描述类型全部排成1行(整齐的格式),而每个职位的标题具有多行。 当前报告给我:

Job Title    Description Type    Posting Description
Cook         Responsibilities    Make food
Cook         Requirements        3 Years of Experience

所需的输出是:

Job Title    Responsibilities    Requirements 
Cook         Make food           3 Years of Experience

我首先尝试了一个基本的CASE语句,该语句使用,但在这里了解到我需要使用CAST。但是,当我这样做时,我会出错。使用我目前拥有的内容,发布说明的完整字符串就通过了。我不确定该如何解决。

奖金:字符串包含HTML文本...如果有人告诉我,那将是很大的帮助。

CAST(
CASE WHEN ([Description Type Number] =3)
THEN [Enterprise Staffing].[Job Opening].[Posting Description]
END 
AS VARCHAR(20))

结果错误 RQP-DEF-0177执行操作'sqlOpenResult'status ='-9'时发生错误。 UDA-SQL-0107操作“打开结果”期间发生了一般异常。 ORA-22835:缓冲区太小,无法从CLOB转换为CHAR或从BLOB转换为RAW(实际:6747,最大:4000)

CAST(
CASE WHEN ([Description Type Number] =3)
THEN [Enterprise Staffing].[Job Opening].[Posting Description]
END 
AS CHAR)

结果错误 RQP-DEF-0177执行操作'sqlOpenResult'status ='-9'时发生错误。 UDA-SQL-0107操作“打开结果”期间发生了一般异常。 ORA-25137:数据值超出范围

1 个答案:

答案 0 :(得分:0)

首先:这是一个交叉表。您可能想得太多。

第二:了解您的数据。

[发布说明]似乎包含长达6747个字符的值。根据错误消息,它可能是 text ntext 。 varchar(20)不够长。尝试将其强制转换为未指定长度的char似乎会引起不同的问题。假设这是MS SQL Server,则可能会有所帮助:

CASE 
  WHEN ([Description Type Number] =3)
    THEN CAST([Enterprise Staffing].[Job Opening].[Posting Description], VARCHAR(8000))
  ELSE CAST('', VARCHAR(8000))
END 

但是您的错误消息可能表明Oracle数据库。 (ORA-52137

CASE 
  WHEN ([Description Type Number] =3)
    THEN CAST((substr([Enterprise Staffing].[Job Opening].[Posting Description], 1, 4000), VARCHAR2(4000))
  ELSE CAST('', VARCHAR2(4000))
END 

此外,Cognos中的CAST使用逗号,而不是 AS