我有一个名为ID的列,我只想提取ID的一部分。
例如:
ID
---------
XX00ABCDE
XX1067HJK
XX78YUTIO
XX00NNYUT
XX56PBPHY
我不想要XX之后的初始XX和任何前导0。
我想要的结果是:
ExtractID
---------
ABCDE
1067HJK
78YUTIO
NNYUT
56PBPHY
我如何使用SQL实现此目的?
提前感谢您的帮助。
答案 0 :(得分:0)
实施例
SELECT REPLACE('abcdefghicde','cde','xxx');
在你的例子中:
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