J'essaie de renvoyer une colonne en sql qui devrait renvoyer 4 caractères de la colonne lorsque le caractère commence par un alphabet, pour un numérique, il ne devrait renvoyer que 3 caractères. Par exemple:
B984 C687 r457 123 578
sortie: la colonne ci-dessus doit renvoyer ce qui suit
column B98 C68 r45 123 578
J'ai utilisé le code suivant mais il ne renvoie que les trois premiers caractères de mon code:
select substring(column,1,3) from table
la sortie de mon code:
column: B984 C687 r457 123 578
comment obtenir une sortie comme celle-ci:
column: B98497 C68756 r45789 123467 578912
3 Réponses :
Suivre devrait faire
select CASE WHEN substring(TheColumn, 1,1) LIKE '[0-9]' THEN substring(TheColumn, 1,3) ELSE substring(TheColumn, 1, 4) END from [dbo].[TabAlpNum]
Si vous utilisez déjà MySQL 8.0, il existe une ligne unique:
SELECT LEFT(column1, IF(column1 RLIKE '^[a-z]', 4, 3)) FROM Table1;
Démo . Et voici la docpage correspondante.
Si c'est 5,7, vous devez vérifier le premier symbole par rapport à la classe de caractères lettre, comme ceci:
SELECT REGEXP_SUBSTR(column1, '[a-z]?[0-9]{3}') FROM Table1;
... qui peut en fait être simplifiée comme le montre la réponse @GordonLinoff.
Démo .
Une méthode est:
select left(col, 3 + (col rlike '^[a-zA-Z'))
Cela utilise le fait que les expressions booléennes évaluent à 1 ou 0 dans un contexte numérique.
Utilisez une expression de casse pour décider si elle doit comporter 3 ou 4 caractères.
Quelle version de MySQL est utilisée?
MySQL <> SQL Server. J'ai supprimé ces balises en conflit, veuillez baliser une seule base de données.