在Oracle中将数字转换为字符串并添加字符

在Oracle中将数字转换为字符串并添加字符,oracle,Oracle,我正在尝试使用 CASE WHEN PackageNum = 2 THEN to_char(DespatchNum + 'B') WHEN PackageNum = 3 THEN to_char(DespatchNum + 'C') WHEN PackageNum = 4 THEN to_char(DespatchNum + 'D') WHEN PackageNum = 5 THEN to_char(DespatchNum + 'E')

我正在尝试使用

CASE
WHEN PackageNum = 2 THEN to_char(DespatchNum + 'B')
    WHEN PackageNum = 3 THEN to_char(DespatchNum + 'C')
       WHEN PackageNum = 4 THEN to_char(DespatchNum + 'D')
            WHEN PackageNum = 5 THEN to_char(DespatchNum + 'E')
           ELSE to_char(DespatchNum)
以ShipmentReference结尾

然而,我得到的错误

ORA-01722:无效号码 172200000-“无效号码” *原因:指定的数字无效。 *操作:指定一个有效的数字

DispatchNum是一个数字

例如,输出看起来像1234B


感谢您的帮助。

正如@gsalem在评论中提到的,连接不正确,要将字符合并到您使用的字符串上,可以使用| | not+

选择packagenum,
DispatchNum,
包装箱
当2时,则发送num | | B
当3时,则发送num | | C
当4时,则发送num | |'D'
当5时,则发送num | | E
ELSE TO_CHAR(DispatchNum)
以ShipmentReference结尾
从表_名称;
其中,对于样本数据:

CREATE TABLE_name(packagenum,dispatchnum)作为

从DUAL CONNECT BY LEVEL(按级别)中选择级别1234,您还可以将
分解为_CHAR(DispatchNum)
,因为这在所有情况下都是常见的

大概是这样的:

with
  tbl (packagenum, despatchnum) as (
    select 2, 3002 from dual union all
    select 5, 4122 from dual union all
    select 7, 8320 from dual
  )
select packagenum, despatchnum,
       to_char(despatchnum) || 
            case packagenum when 2 then 'B'
                            when 3 then 'C'
                            when 4 then 'D'
                            when 5 then 'E' end as shipmentreference
from   tbl
;

PACKAGENUM DESPATCHNUM  SHIPMENTREFERENCE
---------- -----------  -----------------
         2        3002  3002B                                    
         5        4122  4122E                                    
         7        8320  8320   

理想结果是什么?理想结果1234B要在Oracle中连接字符,请使用“| |”而不是“+”,如选择x | |“A”。。。如果x是数字,则使用_char(x)| |'A',您可以添加一种格式以使用逗号分隔符。。。。