首页 > 解决方案 > CAST CASE 语句超出限制

问题描述

我想建立一个报告,在 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))

RESULTING ERROR RQP-DEF-0177 执行操作“sqlOpenResult”状态=“-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)

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

标签: sqlcastingcasecognostidy

解决方案


第一:这是一个交叉表。你可能想多了。

第二:了解你的数据。

看起来 [发布说明] 包含长达 6747 个字符的值。根据错误消息,它可能是textntext。varchar(20) 不够长。尝试将其转换为未指定长度的字符似乎会导致不同的问题。假设这是 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


推荐阅读