问题
How do I get a substring from this example value:
john.abc_1234
I want it to return john.abc
.So basically we need to remove all the information after _
.
More examples: 1234_abc
回答1:
You can use SUBSTR
and INSTR
:
select substr('john.abc_1234', 1, instr('john.abc_1234', '_') -1)
from dual
Warning: This is only guaranteed to work if your string actually has an underscore in it
Update
Additionally, if you are running from Oracle 10g on, you could take the Regex path, which would more powerfully handle exceptions.
Here are some links on how to do it in Oracle:
- http://psoug.org/reference/regexp.html
- http://psoug.org/snippet/Regular-Expressions--Regexp-Cheat-Sheet_856.htm
- http://www.regular-expressions.info/oracle.html
回答2:
You can use this monstrosity, when you're not sure if all your values contain the character you want to cut off your string at.
SELECT
(CASE WHEN INSTR(field, '_') > 0
THEN substr(field, 1, instr(field, '_') -1)
ELSE field
END) AS field
FROM
dual
回答3:
This guy figured it out! 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
来源:https://stackoverflow.com/questions/7717566/remove-all-characters-after-a-specific-character-in-pl-sql