How to substring a MySQL table column

I want to select a field from table and substring it.

For example:

VAN1031 --> 1031

I tried this, but is improper syntax:

SELECT SUBSTR(R.regnumber,3,3) from registration R

How can this be done?


Solution 1:

You don't need the third argument (length) if you want to select all the characters to the right of a specific index:

SELECT SUBSTR(R.regnumber, 4)
FROM registration AS R

I also changed the start index to 4 because in SQL strings are 1-indexed and not 0-indexed as they are in many popular programming languages.

Solution 2:

You can use:

SUBSTR(string,position)
SUBSTR(string,position,length)
SUBSTRING_INDEX(string, delimiter, count)

Examples:

command                                      prints
-------------------------------------------  -----------
select substr("abcd", 1, 1)                  #a
select substr("abcd", 1, 2)                  #ab
select substr("abcd", 2, 1)                  #b
select substr("abcd", 2, 2)                  #bc
select substr("abcd", -2, 1)                 #c
select substr("abcd", -2, 2)                 #cd

select substring_index('ababab', 'b', 1);    #a
select substring_index('ababab', 'b', 2);    #aba
select substring_index('ababab', 'b', 3);    #ababa
select substring_index('ababab', 'b', -1);   #
select substring_index('ababab', 'b', -2);   #ab
select substring_index('ababab', 'b', -3);   #abab

select substr("abcd", 2)                     #bcd
select substr("abcd", 3)                     #cd
select substr("abcd", 4)                     #d
select substr("abcd", -2)                    #cd
select substr("abcd", -3)                    #bcd
select substr("abcd", -4)                    #abcd

From this link.

Solution 3:

You can use SUBSTRING():

select substring(col1, 4)
from table1

See SQL Fiddle with Demo. So your query would be:

SELECT substring(R.regnumber,4) 
from registration R

Of if you want to specify the number of characters to return:

select substring(col1, 4, 4)
from table1

Solution 4:

I noticed that mysql index starts from 1 instead of zero as many programming languages did.

SELECT SUBSTRING(R.regNumber,1,3) FROM registration AS R

Returns VAN and

SELECT SUBSTRING(R.regNumber,4) FROM registration AS R

Returns the remaining part of the string as 1031

Solution 5:

SELECT substring(R.regnumber FROM 4) FROM registration AS R;

and if you want to take the part as an integer not a string you can write:

SELECT CAST(substring(R.regnumber FROM 4) AS UNSIGNED) FROM registration as R;