0
ABC:123 UVW XYZ NN-000

使用最后一个空格后获取值的最佳方法是什么substr()?在这种情况下,我想获得NN-000但也能够在大于或小于 6 个字符的情况下获得最后一个值。

4

3 回答 3

4

在 Oracle 中,使用SUBSTRINSTR函数

SELECT SUBSTR('ABC:123 UVW XYZ NN-000', INSTR('ABC:123 UVW XYZ NN-000', ' ', -1)) 
AS LASTOCCUR
FROM DUAL

结果:

| LASTOCCUR |
-------------
|    NN-000 |

参考现场演示

于 2013-06-03T19:42:36.940 回答
2

在 MySQL 中,您可以使用reverseand substring_index

select data, 
  rv, 
  reverse(substring_index(rv, ' ', 1)) yd
from
(
  select data,
    reverse(data) rv
  from yt
) d;

请参阅带有演示的 SQL Fiddle

在 Oracle 中,您可以使用reverse,substrinstr:

select data, 
  reverse(substr(rv, 0, instr(rv, ' '))) rv
from
(
  select data, reverse(data) rv
  from yt
) d

请参阅带有演示的 SQL Fiddle

于 2013-06-03T18:59:48.040 回答
1

结合 RIGHT()、REVERSE() 和 LOCATE() 的功能

SELECT RIGHT('ABC:123 UVW XYZ NN-000',LOCATE(' ',REVERSE('ABC:123 UVW XYZ NN-000'))-1)

编辑:定位在 MYSQL,而不是 CHARINDEX

REVERSE() 反转字符串,因此它找到的“第一个”空间实际上是最后一个。您可以使用 SUBSTRING 而不是 RIGHT,但如果您所追求的是字符串的末尾,不妨使用 RIGHT。

于 2013-06-03T18:57:03.590 回答