191 votes

Comment supprimer les premiers caractères d'une colonne spécifique dans un tableau ?

En SQL, comment puis-je supprimer les 4 premiers caractères des valeurs d'une colonne spécifique dans une table ? Le nom de la colonne est Student Code et un exemple de valeur est ABCD123Stu1231 . Je veux supprimer les 4 premiers caractères de ma table pour tous les enregistrements.

Veuillez me guider

298voto

Aaron Alton Points 9929
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn

Editer : Pour expliquer, RIGHT prend 2 arguments - la chaîne de caractères (ou colonne) sur laquelle opérer, et le nombre de caractères à retourner (en commençant par le côté "droit" de la chaîne). LEN renvoie la longueur des données de la colonne, et nous soustrayons quatre pour que notre fonction RIGHT laisse les 4 caractères les plus à gauche "derrière".

J'espère que cela a un sens.

Je viens de lire la réponse d'Andrew, et il se peut très bien qu'il ait interprété correctement, et que je me trompe. Si c'est le cas (et que vous voulez mettre à jour la table plutôt que de simplement renvoyer des résultats corrigés), vous pouvez faire ceci :

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)

Il est sur la bonne voie, mais sa solution sera garder les 4 caractères au début de la chaîne, plutôt que d'écarter ces 4 caractères.

10 votes

Cela échouera pour les valeurs comportant moins de 4 caractères. Vous devriez ajouter un bloc case pour retourner la valeur de la colonne pour < 4.

2 votes

Il est probable que la meilleure façon de le gérer serait simplement : UPDATE MyTableSET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4) WHERE LEN(MyColumn) > 4 Le SUBSTRING n'entraînerait pas d'erreur, mais il "mettrait à jour" inutilement les lignes comportant moins de quatre caractères. Cela dit, l'OP a indiqué qu'il souhaitait supprimer les quatre premiers caractères d'une colonne spécifique. Je suppose, à moins de disposer de plus de détails, que TOUTES les lignes doivent être supprimées.

1 votes

@spencer7593 - hahaha...vrai. Vous pouvez toujours ajouter une clause WHERE pour être sûr : WHERE NOT ISNUMERIC(LEFT(MyColumn,1))

93voto

AaronLS Points 12720
Stuff(someColumn, 1, 4, '')

Cela dit, en commençant par le premier 1 position du caractère, remplacer 4 des personnages sans rien ''

7 votes

Vieille question, je sais, mais je préfère cette solution, puisqu'elle n'utilise pas plus d'une fonction ou ne contient pas de grand nombre aléatoire.

4 votes

Plus encore : si someColumn est quelque chose de complexe comme une sous-sélection à partir d'un CTE ou autre, cela ne nécessite pas de l'évaluer deux fois.

1 votes

Pour info, cette solution fonctionne aussi très bien pour le détourage des valeurs numériques.

38voto

gbn Points 197263

Pourquoi utiliser LEN pour avoir deux fonctions de chaîne de caractères ? Tout ce dont vous avez besoin est le caractère 5 sur...

...SUBSTRING (Code1, 5, 8000)...

1 votes

Ce système est-il à l'épreuve du temps ? Est-il possible que les futures versions de MSSQL utilisent une taille maximale de varchar supérieure à 8 000 ?

3 votes

Varchar(max) est déjà supérieur à 8000 caractères. Si vous mettez len(column), ça marchera toujours.

2 votes

Ou utilisez simplement 2000000000. Pourquoi ajouter une fonction LEN. Elle n'ajoute aucune valeur et ignore également les espaces de fin de ligne (si vous les voulez).

15voto

Andrew Hare Points 159332

Essayez ça :

update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);

7voto

Rob Points 24505

Voici une maquette simple de ce que vous essayez de faire :)

CREATE TABLE Codes
(
code1 varchar(10),
code2 varchar(10)
)

INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','')

UPDATE Codes
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4)

Donc, utilisez la dernière instruction contre le champ que vous voulez découper :)

La fonction SUBSTRING réduit Code1, en commençant par le CINQUIÈME caractère, et en continuant sur la longueur de CODE1 moins 4 (le nombre de caractères sautés au début).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X