如果字符串包含另一列中的任何值,请返回该值-SQL Informix

问题描述 投票:0回答:2

我有一列的字符串很长,在某个地方(不在精确的位置)是我要提取的3位数字。字符串的该部分可以是另一个单列表的已定义列表中的任何内容。

因此,如果字符串的一部分包含一列中定义的值,请返回该值。如何使用Informix SQL做到这一点?

谢谢!

这是我要从中提取信息的字符串:

Insert nalog14: 8880888802981130 GERARD BUTLER  KLEVER STR.37 null XANTEN GERMANY null null null 0045000000000 COMERZ AGILE AD null 02085020 01 null Wed Feb 05 00:00:00 CET 2020 978 null 6496.14 NL69ABNA0494540044 Brandsma Yachtservice Eeltjebaasweg 6-8 Sneek THE NETHERLAND 00 528 A 528 null ABNANL2AXXX DOMESTICUSAMSTERDAM This is some random text 130 Invoice number 112362 Repair of Brandsma Vlet Winter Storage Brandsma Vlet null S null 0 null 000 0 null 0 null 1 GERADS SE

并且说这是我的参考列:

220
150
400
300
130
112
...

因此,我的字符串在字符串的“这是一些随机文本”部分之后包含值“ 130”,并且该值也在引用列中。

我想要的输出只是从字符串中提取该值。

130

还有一个问题是,我想要提取的字符串的一部分也可以出现在字符串的其他位置,如您在一开始所看到的8880888802981 130,但这是偶然发生的。我只能识别的模式是所需的输出始终在前后被空格隔开。

我希望这会有所帮助。

sql string informix
2个回答
1
投票

我假设存在一个带有以下内容的表Table1

CREATE TABLE Table1 ( …, line LVARCHAR, … );
CREATE TABLE Table2 (number CHAR(3) NOT NULL);

我还假设Table2中的所有数字都是3位数字。

您可以使用INSTR(字符串内)功能:

INSTR

要搜索的值是所有3位数字(或3个字符的字符串,无论如何)。如果要处理可变长度数据,并且 SELECT t2.number FROM Table1 AS t1 JOIN Table2 AS t2 ON INSTR(t1.line, " " || t2.number || " ") != 0 中的类型不是可变长度类型,则需要将Table2应用于TRIM。避免级联操作会很好。如果您可以修改t2.number,以便将Table2和数字插入前导空格(三位数自动出现在尾部,那么可以使用

number CHAR(5) NOT ULL

如果数字是可变长度,则将不起作用-串联是必要的,在比较中使用它们之前,您需要修剪值:

 SELECT TRIM(t2.number)
   FROM Table1 AS t1
JOIN Table2 AS t2 ON INSTR(t1.line, t2.number) != 0

SELECT t2.number FROM Table1 AS t1 JOIN Table2 AS t2 ON INSTR(t1.line, " " || TRIM(t2.number) || " ") != 0 answer中所指出的,您也可以使用Antonio J. Ortiz运算符代替LIKE功能或INSTR运算符。


1
投票

table1

MATCHES

table2

line
------
"Insert nalog14: 8880888802981130 GERARD..."

...

number
------
"220"
"150"
"400"
© www.soinside.com 2019 - 2024. All rights reserved.