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?
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.
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 .
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
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;
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.