Reputation:
I have the following string.
Input
--------------
2030031469-NAI
To get the numeric part, I am using the following script
declare @str varchar(50)= '2030031469-NAI'
Select
@str
,SUBSTRING(@str, 1, NULLIF(CHARINDEX('-', @str) - 1, -1))
,Left(@str,PATINDEX('%-%',@str)-1)
to get the following output
Output:
----------
2030031469
Is there any other easy/elegant way of doing the same?
Upvotes: 23
Views: 72698
Reputation: 63
To extract number from an unformatted string
DECLARE @Text NVARCHAR(100)= 'extract only 23124R integer @#%%'
SELECT SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), PATINDEX('%[^0-9]%',SUBSTRING(@Text, PATINDEX('%[0-9]%',@Text), LEN(@Text)))-1) [ONLY_INT]
Upvotes: 3
Reputation: 590
In case your string start with alphabet and end with number like ERT-123
you can use this query:
(select substring(@str,patindex('%[0-9]%', @str),len(@str)))
Upvotes: 10
Reputation: 3816
Please check with this, i used in my project for extracting phone numbers
CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '')
Return @TEmp
End
Upvotes: 7