【问题标题】:Substring from last index最后一个索引的子字符串
【发布时间】:2013-05-30 00:18:35
【问题描述】:
ABC:123 UVW XYZ NN-000

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

【问题讨论】:

  • “但在大于小于 6个字符的情况下也能够获得最后一个值”是什么意思
  • @pratik gard,最后一个空格后面的字符串长度可以多于或少于 6 个字符。 NN-00 NN-000 NN-0000 所以我不想为最后 6 个字符选择使用子字符串。
  • 在 Oracle regexp_substr(your_string, '\S*$')

标签: mysql sql oracle substring


【解决方案1】:

在 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 |

参考LIVE DEMO

【讨论】:

    【解决方案2】:

    在 MySQL 中,您可以使用 reversesubstring_index

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

    SQL Fiddle with Demo

    在 Oracle 中,您可以使用 reversesubstrinstr

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

    SQL Fiddle with Demo

    【讨论】:

      【解决方案3】:

      结合 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-06
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2012-03-23
        • 2013-09-18
        相关资源
        最近更新 更多