Teradata 以相反的顺序搜索字符串
Teradata search for a string in reverse order
我们正在从 MS SQL 进行转换。
原码为
reverse(ltrim(rtrim(substring(reverse("string"),1,(charindex('
',reverse("string")))))))
所以它所做的是在末尾搜索一个字符串,直到找到 space,它获取该字符串作为它的值
EX。
'ABCD 123'结果是'123'
'STEP 12 3-2'结果是'3-2'
到目前为止我有这个 SELECT substr('ABCDE 1234', character('ABCDE 1234')-2)
但不知道如何在 Teradata 中进行反向搜索:(
您可以尝试以下操作:
查询:
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 会给我们 "space".
的出现次数
substr + instr
select 'ABCD 123' as str
,substr(str,instr(str,' ',-1)+1) as token
;
+----------+-------+
| str | token |
+----------+-------+
| ABCD 123 | 123 |
+----------+-------+
select 'STEP 12 3-2' as str
,substr(str,instr(str,' ',-1)+1) as token
;
+-------------+-------+
| str | token |
+-------------+-------+
| STEP 12 3-2 | 3-2 |
+-------------+-------+
regexp_substr(如果您知道正则表达式就非常简单,但 CPU 成本更高)
select 'ABCD 123' as str
,regexp_substr(str,'[^ ]*$') as token
;
+----------+-------+
| str | token |
+----------+-------+
| ABCD 123 | 123 |
+----------+-------+
select 'STEP 12 3-2' as str
,regexp_substr(str,'[^ ]*$') as token
;
+-------------+-------+
| str | token |
+-------------+-------+
| STEP 12 3-2 | 3-2 |
+-------------+-------+
我们正在从 MS SQL 进行转换。 原码为
reverse(ltrim(rtrim(substring(reverse("string"),1,(charindex(' ',reverse("string")))))))
所以它所做的是在末尾搜索一个字符串,直到找到 space,它获取该字符串作为它的值
EX。
'ABCD 123'结果是'123'
'STEP 12 3-2'结果是'3-2'
到目前为止我有这个 SELECT substr('ABCDE 1234', character('ABCDE 1234')-2) 但不知道如何在 Teradata 中进行反向搜索:(
您可以尝试以下操作:
查询:
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 会给我们 "space".
的出现次数substr + instr
select 'ABCD 123' as str
,substr(str,instr(str,' ',-1)+1) as token
;
+----------+-------+
| str | token |
+----------+-------+
| ABCD 123 | 123 |
+----------+-------+
select 'STEP 12 3-2' as str
,substr(str,instr(str,' ',-1)+1) as token
;
+-------------+-------+
| str | token |
+-------------+-------+
| STEP 12 3-2 | 3-2 |
+-------------+-------+
regexp_substr(如果您知道正则表达式就非常简单,但 CPU 成本更高)
select 'ABCD 123' as str
,regexp_substr(str,'[^ ]*$') as token
;
+----------+-------+
| str | token |
+----------+-------+
| ABCD 123 | 123 |
+----------+-------+
select 'STEP 12 3-2' as str
,regexp_substr(str,'[^ ]*$') as token
;
+-------------+-------+
| str | token |
+-------------+-------+
| STEP 12 3-2 | 3-2 |
+-------------+-------+