web-dev-qa-db-fra.com

Comment sous-chaîne d'une colonne de table MySQL

Je veux sélectionner un champ de la table et le sous-chaîne.

Par exemple:

VAN1031 --> 1031

J'ai essayé ceci, mais sa syntaxe est incorrecte:

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

Comment cela peut-il être fait?

39
Rakesh

Vous n'avez pas besoin du troisième argument (longueur) si vous souhaitez sélectionner tous les caractères à droite d'un index spécifique:

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

J'ai également changé l'index de début à 4 parce que, dans SQL, les chaînes sont indexées 1 et non indexées comme elles le sont dans de nombreux langages de programmation courants.

36
Mark Byers

Vous pouvez utiliser:

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

Exemples:

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 ce lien

23
Anil Limbani

Vous pouvez utiliser SUBSTRING() :

select substring(col1, 4)
from table1

Voir SQL Fiddle avec Demo . Donc, votre requête serait:

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

Si vous souhaitez spécifier le nombre de caractères à renvoyer:

select substring(col1, 4, 4)
from table1
6
Taryn

J'ai remarqué que mysql index commence à 1 au lieu de zéro comme le faisaient beaucoup de langages de programmation.

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

Renvoie VAN et 

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

Renvoie la partie restante de la chaîne sous la forme 1031

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

et si vous voulez prendre la partie comme un entier et non comme une chaîne, vous pouvez écrire:

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

Parfois, vous devez attraper la colonne sans quelques derniers caractères. Par exemple, j'ai:

This is a string

Disons que pour une raison quelconque, je veux une colonne sans les 6 derniers caractères:

This is a 

Nous pouvons faire (en utilisant la réponse de @bluefeet et LENGHT):

select substring(col1, 1,LENGTH(col1)-7)
from table1

Ce n'était qu'un exemple, mais vous avez eu l'idée que j'utilise pour corriger une mauvaise importation de base de données.

0
Marcelo Agimóvel