我们正在从MS进行转换。原始代码是
( reverse(ltrim(rtrim(substring(reverse("string"),1,(charindex(‘',反向(“string”)
因此,它所做的是在末尾搜索字符串,直到找到一个空格时,它才得到该字符串的值。
例如。
'ABCD 123‘结果是'123'
‘步骤123-2’结果是' 3-2‘
到目前为止,我有以下选择substr('ABCDE 1234',字符(‘ABCDE 1234')-2),但不知道如何在Teradata中进行反向搜索:(
发布于 2017-03-10 21:53:09
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 |
+-------------+-------+发布于 2017-03-10 15:31:15
您可以尝试如下:
查询:
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)输出:
123strtok用特定的分隔符打断字符串,而character_length + oreplace将给出出现“空格”的次数。
发布于 2017-03-10 21:57:13
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 |
+-------------+-------+https://stackoverflow.com/questions/42714879
复制相似问题