Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL提取ID的某些部分_Sql_Db2_Text Extraction - Fatal编程技术网

使用SQL提取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的列,我只想提取ID的一部分

例如:

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语句。