我正在尝试从oracle表中获取id。这就像TN0001234567890345
。我想要的是根据最右边的10个位置(例如4567890345
)对值进行排序。我正在使用Oracle 11g。是否有任何功能可以删除Oracle SQL中最右边的10个位置?
提前致谢
tismon
答案 0 :(得分:40)
答案 1 :(得分:3)
codaddict的解决方案就有效。但是,如果您可以使用较短的字符串(例如,修剪为最后10个字符,其中一个字符串要修剪为' abc'),则返回null,这可能不是您想要的。
因此,这里有一个稍微修改过的版本,只要它们存在就会占用最多10个字符,无论长度如何:
select substr(colName, -least(length(colName), 10)) from tableName;
答案 2 :(得分:1)
这样做的另一种方式虽然更乏味。使用REVERSE
和SUBSTR
功能,如下所示:
SELECT REVERSE(SUBSTR(REVERSE('TN0001234567890345'), 1, 10)) FROM DUAL;
第一个REVERSE函数将返回字符串5430987654321000NT
。
SUBSTR
函数将从第一个字符到第十个字符读取我们的新字符串5430987654321000NT
,该字符将返回5430987654。
最后一个REVERSE
函数将返回原始字符串减去前8个字符,即4567890345
答案 3 :(得分:0)
是的,这是一个旧帖子,但由于某人因为某些原因进行编辑而出现在列表中,我感到震惊的是没有包含正则表达式解决方案!所以这里是一个解决方案,在order by子句中使用regex_substr只是为了徒劳无功。正则表达式查看字符串中的最后10个字符:
with tbl(str) as (
select 'TN0001239567890345' from dual union
select 'TN0001234567890345' from dual
)
select str
from tbl
order by to_number(regexp_substr(str, '.{10}$'));
假设字符串的ID部分至少为10位。
答案 4 :(得分:0)
SQL> SELECT SUBSTR('00000000123456789', -10) FROM DUAL;
结果:0123456789