【问题标题】:Converting number to string and adding a character in Oracle在Oracle中将数字转换为字符串并添加一个字符
【发布时间】:2021-05-24 22:44:25
【问题描述】:

我正在尝试在字符串末尾添加一个字符

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)

END 作为 ShipmentReference,

但是我得到了错误

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

DespatchNum 是一个数字

例如,输出类似于 1234B

帮助表示赞赏。

【问题讨论】:

  • 想要的结果是什么?
  • 理想结果1234B
  • 要在 Oracle 中连接字符,请使用 '||'而不是 '+',如 select x||'A' ... 并使用 to_char(x)||'A' 如果 x 是数字,并且您可以添加格式以具有逗号分隔符,....

标签: oracle


【解决方案1】:

你可以使用:

SELECT packagenum,
       despatchnum,
       CASE PackageNum
       WHEN 2 THEN DespatchNum || 'B'
       WHEN 3 THEN DespatchNum || 'C'
       WHEN 4 THEN DespatchNum || 'D'
       WHEN 5 THEN DespatchNum || 'E'
       ELSE TO_CHAR(DespatchNum)
       END as ShipmentReference
FROM   table_name;

其中,对于样本数据:

CREATE TABLE table_name ( packagenum, despatchnum ) AS
SELECT LEVEL, 1234 FROM DUAL CONNECT BY LEVEL <= 6;

输出:

PACKAGENUM DESPATCHNUM SHIPMENTREFERENCE
1 1234 1234
2 1234 1234B
3 1234 1234C
4 1234 1234D
5 1234 1234E
6 1234 1234

db小提琴here

【讨论】:

    【解决方案2】:

    正如@gsalem 在 cmets 中提到的,连接不正确,将字符连接到您使用的字符串上 ||不是+

    【讨论】:

      【解决方案3】:

      您也可以排除TO_CHAR(DESPATCHNUM),因为它适用于所有情况。

      类似这样的:

      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   
      

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多