TERADATA:如何使用position函数返回子字符串在字符串中的位置

TERADATA:如何使用position函数返回子字符串在字符串中的位置,teradata,Teradata,我在表中有一个字符串“Rj 0001 201410212014110301G 20141103ioR4564534 N20141021N 11R”。我想从字符串中返回值“R4564534”。 我使用的查询是: 选择SUBSTR(columnX,POSITION('R'在columnX中),8) 但是它返回“Rj”而不是“R4564534”。 我想得到的结果是“R4564534”。它实际上是“Rj”,只有两个字符吗?不是“Rj 0001” 字符串的第一个位置已经有一个“R”,当然它不是以第二个“R

我在表中有一个字符串“Rj 0001 201410212014110301G 20141103ioR4564534 N20141021N 11R”。我想从字符串中返回值“R4564534”。
我使用的查询是:

选择SUBSTR(columnX,POSITION('R'在columnX中),8)

但是它返回“Rj”而不是“R4564534”。

我想得到的结果是“R4564534”。

它实际上是“Rj”,只有两个字符吗?不是“Rj 0001”

字符串的第一个位置已经有一个“R”,当然它不是以第二个“R”开头的

YoutTeradata发布了什么

在TD14中,您可以使用INSTR从第二个字符开始:

SUBSTR(columnX,INSTR(columnX,'R',2),8)

如果你有更复杂的规则,你也可以在REGEXP_SUBSTR中使用正则表达式。

我的TD版本是13,所以我不能使用INSTR。该字符串不是固定字符串,因为我有许多其他字符串。我现在使用的其他字符串不包含“Rj”,因此查询工作正常。只有这个字符串前面有“Rj”。是否有一种动态方法可以只获取“R4564534”这样的值?如果您知道您要查找的字符串从不从位置1开始,您可以使用
SUBSTR(columnX,position('R'IN SUBSTR(columnX,2))+1,8)
。我提出了另一个问题。我需要对更多的条件使用CASE语句,但当我对这个查询使用CASE时,它不会返回任何值。这是我的查询:CASE columnX当SUBSTR(columnX,POSITION('R'在SUBSTR(columnX,2)))然后SUBSTR(columnX,POSITION('R'在SUBSTR(columnX,2))+1,8)end将
columnX
SUBSTR(columnX,POSITION('R'在SUBSTR(columnX,2))
进行比较,当然这永远不会计算为真。您可能需要类似于
的CASE,当POSITION('R'在SUBSTR(columnX,2))>0时,然后SUBSTR(columnX,POSITION('R'在SUBSTR(columnX,2))+1,8)结束
感谢这个概念的使用。我将其更改为>'',因为结果是字符,而不是数字。