CAST CASE语句超出限制

问题描述 投票:0回答: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'state =' - 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'state =' - 9'时发生错误。 UDA-SQL-0107在“打开结果”操作期间发生了一般异常。 ORA-25137:数据值超出范围

sql casting case cognos tidy
1个回答
0
投票

第一:这是一个交叉表。你可能会过度思考这个问题。

第二:了解你的数据。

看起来[发布说明]包含的值长达6747个字符。根据错误消息,它可能是text或ntext。 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。

© www.soinside.com 2019 - 2024. All rights reserved.