Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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字段的一部分_Sql - Fatal编程技术网

选择两个已知字符串元素之间的SQL字段的一部分

选择两个已知字符串元素之间的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

我希望只从SQL表中的注释字段中提取字符串的一部分。当前字符串如下所示:“TN:mba卡车运输| HR:cf82267 | TR:solomon | AI:| N/A”。我要做的是从TN:到下一个管道中选择任何内容。然后我想从HR:到下一个管道中选择任何内容。注意,这些参数之间的数据并不总是相同的长度,因此不能使用
子字符串
例如:

我写这段代码是为了得到字符串中的数字列表

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,请查看