Como subtrair uma coluna de tabela MySQL

quero seleccionar um campo da tabela e substringi-lo.

por exemplo:

VAN1031 --> 1031

tentei isto, mas é sintaxe imprópria:

SELECT SUBSTR(R.regnumber,3,3) from registration R
Como isso pode ser feito?

Author: Eric Leschinski, 2012-10-07

6 answers

Não precisa do terceiro argumento (comprimento) Se quiser seleccionar todos os caracteres à direita de um índice específico:

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

Eu também mudei o índice inicial para 4 Porque em strings SQL são 1-indexados e não 0-indexados como eles são em muitas linguagens de programação populares.

 32
Author: Mark Byers, 2012-10-07 17:58:23

Pode usar:

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

Exemplos:

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

De esta ligação.

 23
Author: Anil Limbani, 2014-11-07 16:21:22

Pode usar SUBSTRING():

select substring(col1, 4)
from table1

Ver Violino SQL com demonstração. Então a sua pergunta seria:

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
 6
Author: Taryn, 2012-10-07 18:06:34
SELECT substring(R.regnumber FROM 4) FROM registration AS R;

E se quiser tomar a parte como um inteiro e não como um texto, pode escrever:

SELECT CAST(substring(R.regnumber FROM 4) AS UNSIGNED) FROM registration as R;
 1
Author: Mohsen B, 2016-05-03 20:19:25

Reparei que o índice mysql começa a partir de 1 em vez de zero, como muitas linguagens de programação.

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

Devolve VAN e

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

Devolve a parte restante do texto como 1031

 1
Author: Ruberandinda Patience, 2017-05-08 08:49:44
Às vezes, é preciso apanhar a coluna sem os últimos caracteres. Por exemplo, eu tenho:
This is a string
Digamos que, por alguma razão, quero uma coluna sem os últimos 6 caracteres.
This is a 

Podemos fazer (usando a resposta de @bluefeet e LENGHT):

select substring(col1, 1,LENGTH(col1)-7)
from table1
Foi apenas um exemplo, mas percebeste a ideia, estou a usar para corrigir uma importação de base de dados errada.
 0
Author: Marcelo Agimóvel, 2017-12-22 13:23:55