使用SQL提取ID的某些部分
我有一个名为ID的列,我只想提取ID的一部分 例如:使用SQL提取ID的某些部分,sql,db2,text-extraction,Sql,Db2,Text Extraction,我有一个名为ID的列,我只想提取ID的一部分 例如: ID --------- XX00ABCDE XX1067HJK XX78YUTIO XX00NNYUT XX56PBPHY 我不想要开头的XX和XX之后的任何前导0 我想要的结果是: ExtractID --------- ABCDE 1067HJK 78YUTIO NNYUT 56PBPHY 如何使用SQL实现这一点 提前感谢您的帮助 例子 在您的示例中: ID --------- XX00ABCDE XX1067HJK XX78Y
ID
---------
XX00ABCDE
XX1067HJK
XX78YUTIO
XX00NNYUT
XX56PBPHY
我不想要开头的XX和XX之后的任何前导0
我想要的结果是:
ExtractID
---------
ABCDE
1067HJK
78YUTIO
NNYUT
56PBPHY
如何使用SQL实现这一点
提前感谢您的帮助
例子
在您的示例中:
ID
---------
XX00ABCDE
XX1067HJK
XX78YUTIO
XX00NNYUT
XX56PBPHY
从
TBALE\u NAME
中选择REPLACE(ID,'XX',''),这并不漂亮,但是如果您有特定的值(XX),并且您知道在“XX”之后没有超过两个“0”,那么下面的操作将起作用。如果有时有三个、四个或更多的“0”,则只需不断重复此模式,最里面的replace语句就是较长的字符串
SELECT
Replace(Replace(Replace(T.ID,'XX00',''),'XX0',''),'XX','')
AS ExtractID
FROM Table T
同样,它并不漂亮,但它应该做你想做的事。如果字符串的格式总是这样: XX+NUM+ALPHA\u你能做到
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
哪个SQL数据库马达?在任何情况下,您都可以根据SQL数据库马达检查
TRIM
功能。更多信息:谢谢。它确实会删除XX,但不会删除0。知道为什么吗?我终于成功了。我先换了XX00,然后换了XX。结果是:Replace(Replace)(Replace(T.ID,'XX00','','XX0','','XX','')Great@Tuatara-我更新了答案,以反映从内到外的Replace语句。