Teradata以相反的顺序搜索字符串

时间:2017-03-10 09:33:13

标签: substring teradata reverse substr

我们正在从MS SQL进行转换。 原始代码是

  

反向(LTRIM(RTRIM(子(反向( “串”),1,(CHARINDEX(”   ”,反向( “串”)))))))

所以它的作用是它在结束时搜索一个字符串,直到它找到一个空格,它将该字符串作为其值

EX。

'ABCD 123'结果为'123'

'STEP 12 3-2'结果为'3-2'

到目前为止,我有这个SELECT substr('ABCDE 1234',字符('ABCDE 1234') - 2) 但不知道如何在Teradata进行反向搜索:(

3 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

<强>查询:

select strtok('STEP 12 3-2',' ',character_length('STEP 12 3-2') - character_length(Oreplace('STEP 12 3-2',' ',''))+1)

<强>输出:

3-2

<强>查询:

select strtok('ABCD 123',' ',character_length('ABCD 123') - character_length(Oreplace('ABCD 123',' ',''))+1)

<强>输出:

123

strtok打破了具有特定分隔符的字符串,而character_length + oreplace将为我们提供&#34; space&#34;的出现次数。

答案 1 :(得分:0)

substr + instr

div.spc:nth-of-type(3n){
  display:none;
}
select  'ABCD 123'                      as str
       ,substr(str,instr(str,' ',-1)+1) as token
;       

+----------+-------+
|   str    | token |
+----------+-------+
| ABCD 123 |   123 |
+----------+-------+

答案 2 :(得分:0)

regexp_substr (如果您知道正则表达式但CPU成本较高,则非常简单)

select  'STEP 12 3-2'                   as str
       ,regexp_substr(str,'[^ ]*$') as token
;       

+-------------+-------+
|     str     | token |
+-------------+-------+
| STEP 12 3-2 |  3-2  |
+-------------+-------+
{{1}}