簡體   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