选择两个已知字符串元素之间的SQL字段的一部分
我希望只从SQL表中的注释字段中提取字符串的一部分。当前字符串如下所示:“TN:mba卡车运输| HR:cf82267 | TR:solomon | AI:| N/A”。我要做的是从TN:到下一个管道中选择任何内容。然后我想从HR:到下一个管道中选择任何内容。注意,这些参数之间的数据并不总是相同的长度,因此不能使用选择两个已知字符串元素之间的SQL字段的一部分,sql,Sql,我希望只从SQL表中的注释字段中提取字符串的一部分。当前字符串如下所示:“TN:mba卡车运输| HR:cf82267 | TR:solomon | AI:| N/A”。我要做的是从TN:到下一个管道中选择任何内容。然后我想从HR:到下一个管道中选择任何内容。注意,这些参数之间的数据并不总是相同的长度,因此不能使用子字符串例如: 我写这段代码是为了得到字符串中的数字列表 SELECT DISTINCT A.REZ FROM ( SELECT REGEXP_SUBSTR('1213-120
子字符串例如:
我写这段代码是为了得到字符串中的数字列表
SELECT DISTINCT A.REZ FROM
(
SELECT REGEXP_SUBSTR('1213-1201+1202+1203+1204+1205+1206+1207+1208+1209+1210+1211', '[0-9]+', 1, LEVEL) AS REZ FROM dual
CONNECT BY REGEXP_SUBSTR('1213-1201+1202+1203+1204+1205+1206+1207+1208+1209+1210+1211', '[0-9]+', 1, LEVEL) IS NOT NULL
) A;
您可以编写正则表达式来获取每个管道之间的单词
因此,它将是这样的:
SELECT A.REZ FROM
(
SELECT REGEXP_SUBSTR(Your_Var, Your_Regular_Expression, 1, LEVEL) AS REZ FROM dual
CONNECT BY REGEXP_SUBSTR(Your_Var, Your_Regular_Expression, 1, LEVEL) IS NOT NULL
) A;
其中您的_Var
将保存您想要处理的文本
而您的正则表达式将是您需要构造以满足需要的正则表达式
注意:这是适用于Oracle的Oracle Sql语法,可根据不同的字符串长度灵活使用。在我的示例中,我没有创建一个可以从中选择samplestring的表。所以有点笨重。如果您可以使用普通的字段名而不是重复字符串,它将看起来更加紧凑
SELECT SUBSTR('TN:mba trucking|HR:cf82267|TR:solomon|AI:|N/A',
INSTR('TN:mba trucking|HR:cf82267|TR:solomon|AI:|N/A', 'TN:'),
INSTR('TN:mba trucking|HR:cf82267|TR:solomon|AI:|N/A', '|') - 1)
FROM dual;
我加入了-1来切断管道。如果你想,你也可以把TN:切断。这是一个非常基本的方法,而不是最好的解决方案。如果文本包含您在instr函数中查找的一些关键字,您将遇到问题。根据整个上下文,使用一些正则表达式可能是明智的,如前面提到的simsim。请选择哪个RDBMS。对于Sql Server,请参见哪个数据库?Oracle、SQLServer、MySQL?对于Oracle,请查看