使用SQL提取ID的某些部分

时间:2017-01-06 20:55:59

标签: sql db2 text-extraction

我有一个名为ID的列,我只想提取ID的一部分。

例如:

ID
---------
XX00ABCDE
XX1067HJK
XX78YUTIO
XX00NNYUT
XX56PBPHY

我不想要XX之后的初始XX和任何前导0。

我想要的结果是:

ExtractID
---------
ABCDE
1067HJK
78YUTIO
NNYUT
56PBPHY

我如何使用SQL实现此目的?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

  

实施例

SELECT REPLACE('abcdefghicde','cde','xxx');

source

在你的例子中

SELECT REPLACE(ID,'XX','')FROM TBALE_NAME

答案 1 :(得分:0)

它不漂亮,但如果您有特定值(XX)并且您知道在“XX”之后您的“0”不超过两个,那么以下内容将起作用。如果你有时候有三个,四个或更多“0”,那么你只需要重复这个模式,使用较长的字符串作为最里面的替换语句。

SELECT
  Replace(Replace(Replace(T.ID,'XX00',''),'XX0',''),'XX','')
  AS ExtractID
FROM Table T

同样,它不漂亮,但它应该做你想要的。

答案 2 :(得分:0)

如果你的字符串总是像这样格式化:

XX + NUM + ALPHA_UPPER你可以做到

with tmp as (
select id, 
trim(translate(replace(ID, 'XX', ''), '          ', '0123456789')) idalpha, 
trim(translate(ID, '                          ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')) IDNUM
from  yourlib.yourtable
)
select id, 
ifnull(cast(nullif(cast(case when IDNUM='' then 0 else IDNUM end as integer), 0) as varchar(10)), '') || idalpha as NewID
from tmp