繁体   English   中英

SQL脚本删除字段中字母和数字值之间的零

[英]SQL script to remove zeros between alphabetic and numeric values within a field

我想更新db2数据库中的表,并删除字母和数字值之间的零。

例如,我有列元素:CompanyName。 我想获取所有字母和数字之间都为零的CompanyName,即ABCD001234,并将其替换为ABCD1234。 这些值超过30000,因此需要一个脚本。

修剪的更多示例如下所示:

  • ABCD1234 -> ABCD1234 (no change)
  • JFKD011011 -> JFKD11011
  • A000000001 -> A1
  • Z000000000 -> Z0

最好是,我想要一个无需UPDATE就可以测试的脚本,然后在结果看起来正确之后添加UPDATE语句。

尝试这个:

select                                                    
trim(translate(CompanyName, '          ', '0123456789')) ||        
cast(translate(CompanyName, '                          ', 'ABCDEFGIJKLMNOPQRSTUVWXYZ') as integer)                                               
from yourtable

假设您的列称为COL1,在表TABLE1中,您可以获得NEWSTR中期望的新值。 从那里您可以轻松地准备UPDATE:

SELECT COL1, SUBSTR(COL1, 1, ZX) 
|| CAST( CAST(SUBSTR(COL1, ZX+1,99) AS INT) AS VARCHAR(18)) AS NEWSTR
     FROM 
    (SELECT COL1, LENGTH(COL1) AS ZY, LENGTH(RTRIM(TRANSLATE(COL1, ' ', '0123456789 ')))   AS ZX FROM TABLE1) X

;

要进行测试:

    SELECT COL1, SUBSTR(COL1, 1, ZX) 
    || CAST( CAST(SUBSTR(COL1, ZX+1,99) AS INT) AS VARCHAR(18)) AS NEWSTR
         FROM 
        (SELECT COL1, LENGTH(COL1) AS ZY, LENGTH(RTRIM(TRANSLATE(COL1, ' ', '0123456789 ')))   AS ZX FROM 
                   (SELECT 'ABCD1234' AS COL1 FROM sysibm.sysdummy1 UNION ALL SELECT 'JFKD011011' AS COL1 FROM sysibm.sysdummy1 
      UNION ALL SELECT 'A000000001' AS COL1 FROM sysibm.sysdummy1 UNION ALL SELECT 'Z000000000' AS COL1 FROM sysibm.sysdummy1 
      ) K
) X

输出:

COL1       NEWSTR   
 ---------- ---------
 ABCD1234   ABCD1234
 JFKD011011 JFKD11011
 A000000001 A1
 Z000000000 Z0

在MSSQL中,使用PATINDEX()函数应该更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM