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

删除PL/SQL中特定字符后的所有字符,sql,oracle,plsql,oracle9i,substr,Sql,Oracle,Plsql,Oracle9i,Substr,如何从该示例值中获取子字符串: john.abc_1234 我希望它返回john.abc。因此,基本上,我们需要在u之后删除所有信息 更多示例:1234_abc您可以使用SUBSTR和INSTR: 警告:仅当字符串中实际包含下划线时,才能保证此操作有效 更新 此外,如果您在上从Oracle 10g运行,则可以使用Regex路径,这将更有效地处理异常 以下是有关如何在Oracle中执行此操作的一些链接: 当您不确定是否所有值都包含要截断字符串的字符时,可以使用此怪物 SELECT (C

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

 john.abc_1234
我希望它返回john.abc。因此,基本上,我们需要在u之后删除所有信息

更多示例:1234_abc

您可以使用SUBSTR和INSTR:

警告:仅当字符串中实际包含下划线时,才能保证此操作有效

更新

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

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


当您不确定是否所有值都包含要截断字符串的字符时,可以使用此怪物

SELECT
    (CASE WHEN INSTR(field, '_') > 0
        THEN substr(field, 1, instr(field, '_') -1)
        ELSE field
    END) AS field
FROM
    dual
这家伙知道了!


您可以通过substr的简单组合使用。。和仪器。。。要查找不带下划线的字符串,请使用特殊字符。另外,为了只选择包含字符串的uu,您可以使用以下附加where子句

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

很乐意帮忙。确保你投票/接受有帮助的答案you@Adrian,正则表达式是否在9i中可用?“我还以为只有10g以上?”本,我完全错过了oracle9i标签。我猜Regex只能从10开始使用。为了有一个正则表达式示例,这里有一种使用Regex的方法:从dual中选择regexp_substr'john.abc_1234','[^33;]*';它假设您希望在第一个下划线之前保持所有状态。或者选择regexp_替换'john.abc_1234','....*','1'可能用于版本10+这是否回答了您的问题?
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
       select substr('john.abc_1234', 1, 
       instr('john.abc_1234', '_') -1)
      from dual where 
      instr('john.abc_1234', '_')>0