删除PL / SQL中特定字符后的所有字符

时间:2011-10-10 19:22:51

标签: sql oracle plsql oracle9i substr

如何从此示例值中获取子字符串:

 john.abc_1234

我希望它返回john.abc。所以基本上我们需要删除_之后的所有信息。

更多例子:1234_abc

4 个答案:

答案 0 :(得分:17)

您可以使用SUBSTRINSTR

select substr('john.abc_1234', 1, instr('john.abc_1234', '_') -1)
from dual
  

警告:只有在您的字符串中实际包含下划线

时,才能保证此功能

<强>更新

此外,如果您从Oracle 10g开始运行,则可以使用Regex路径,这将更有效地处理异常。

以下是有关如何在Oracle中执行此操作的一些链接:

答案 1 :(得分:1)

如果您不确定所有值是否包含要剪切字符串的字符,则可以使用此怪物。

SELECT
    (CASE WHEN INSTR(field, '_') > 0
        THEN substr(field, 1, instr(field, '_') -1)
        ELSE field
    END) AS field
FROM
    dual

答案 2 :(得分:0)

您可以使用substr(..)instr(...)的简单组合来查找不含underscore特殊字符的字符串。同样,为了仅选择包含字符串的_,您可以使用以下附加的where子句

       select substr('john.abc_1234', 1, 
       instr('john.abc_1234', '_') -1)
      from dual where 
      instr('john.abc_1234', '_')>0

答案 3 :(得分:-1)

这家伙弄明白了! http://programcsharp.com/blog/post/strip-non-numeric-characters-from-a-string-in-sql-server

SELECT
    (SELECT CAST(CAST((
        SELECT SUBSTRING(FieldToStrip, Number, 1)
        FROM master..spt_values
        WHERE Type='p' AND Number <= LEN(FieldToStrip) AND
            SUBSTRING(FieldToStrip, Number, 1) LIKE '[0-9]' FOR XML Path(''))
    AS xml) AS varchar(MAX)))
FROM
    SourceTable