如何在oracle中获得最多10个字符串的位置

时间:2010-10-08 06:59:07

标签: sql oracle sorting oracle11g

我正在尝试从oracle表中获取id。这就像TN0001234567890345。我想要的是根据最右边的10个位置(例如4567890345)对值进行排序。我正在使用Oracle 11g。是否有任何功能可以删除Oracle SQL中最右边的10个位置?

提前致谢

tismon

5 个答案:

答案 0 :(得分:40)

您可以将SUBSTR功能用作:

select substr('TN0001234567890345',-10) from dual;

输出:

4567890345

答案 1 :(得分:3)

如果已知你的字符串至少与要修剪它的长度一样长,那么

codaddict的解决方案就有效。但是,如果您可以使用较短的字符串(例如,修剪为最后10个字符,其中一个字符串要修剪为' abc'),则返回null,这可能不是您想要的。

因此,这里有一个稍微修改过的版本,只要它们存在就会占用最多10个字符,无论长度如何:

select substr(colName, -least(length(colName), 10)) from tableName;

答案 2 :(得分:1)

这样做的另一种方式虽然更乏味。使用REVERSESUBSTR功能,如下所示:

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