如何从此示例值中获取子字符串:
john.abc_1234
我希望它返回john.abc
。所以基本上我们需要删除_
之后的所有信息。
更多例子:1234_abc
答案 0 :(得分:17)
您可以使用SUBSTR
和INSTR
:
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