【发布时间】:2011-10-10 19:22:50
【问题描述】:
如何从这个示例值中获取子字符串:
john.abc_1234
我希望它返回john.abc。所以基本上我们需要删除_之后的所有信息。
更多示例:1234_abc
【问题讨论】:
-
这能回答你的问题吗? How to remove part of the string in oracle
标签: sql oracle plsql oracle9i substr
如何从这个示例值中获取子字符串:
john.abc_1234
我希望它返回john.abc。所以基本上我们需要删除_之后的所有信息。
更多示例:1234_abc
【问题讨论】:
标签: sql oracle plsql oracle9i substr
您可以使用SUBSTR 和INSTR:
select substr('john.abc_1234', 1, instr('john.abc_1234', '_') -1)
from dual
警告:只有当您的字符串中确实有下划线时,才能保证有效
更新
此外,如果您从 Oracle 10g 开始运行,您可以采用 Regex 路径,这样可以更有效地处理异常。
以下是有关如何在 Oracle 中执行此操作的一些链接:
【讨论】:
select regexp_substr('john.abc_1234', '[^_]*') from dual; 它假设你想保持所有直到第一个下划线。
select regexp_replace('john.abc_1234', '(.*)_.*','\1') from dual 可能用于版本 10+
您可以通过substr(..) 和instr(...) 的简单组合来查找不含underscore 特殊字符的字符串。此外,为了只选择包含字符串的_,您可以使用额外的where 子句,如下所示
select substr('john.abc_1234', 1,
instr('john.abc_1234', '_') -1)
from dual where
instr('john.abc_1234', '_')>0
【讨论】:
当你不确定你的所有值是否都包含你想要切断字符串的字符时,你可以使用这个怪物。
SELECT
(CASE WHEN INSTR(field, '_') > 0
THEN substr(field, 1, instr(field, '_') -1)
ELSE field
END) AS field
FROM
dual
【讨论】:
这家伙想通了! 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
【讨论】: