简体   繁体   English

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

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

I would like to update a table within my db2 database and remove the zeros that are between the alphabetic and numeric values. 我想更新db2数据库中的表,并删除字母和数字值之间的零。

For example I have the column element: CompanyName. 例如,我有列元素:CompanyName。 I would like to get all the CompanyName's that have the zero(s) between alphabetic and numeric values, ie ABCD001234, and replace it with ABCD1234. 我想获取所有字母和数字之间都为零的CompanyName,即ABCD001234,并将其替换为ABCD1234。 There are over 30000 of these values, so a script is needed. 这些值超过30000,因此需要一个脚本。

Some more examples of the trimming are shown below: 修剪的更多示例如下所示:

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

Preferably, I would like a script that I can test without the UPDATE, and then add the UPDATE statement after the results look correct. 最好是,我想要一个无需UPDATE就可以测试的脚本,然后在结果看起来正确之后添加UPDATE语句。

try this: 尝试这个:

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

Assuming your column is called COL1, in table TABLE1, you can obtain new values as desidered in NEWSTR. 假设您的列称为COL1,在表TABLE1中,您可以获得NEWSTR中期望的新值。 From there you can easily prepare the UPDATE: 从那里您可以轻松地准备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

; ;

To make a test: 要进行测试:

    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

Output: 输出:

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

In MSSQL it should be easier, using PATINDEX() function. 在MSSQL中,使用PATINDEX()函数应该更容易。

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

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