0
votes

Comment choisir la longueur de sortie en fonction du fait que le premier caractère est ou non une lettre?

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

sql

3 commentaires

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.


3 Réponses :


0
votes

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]


0 commentaires

1
votes

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 .


0 commentaires

1
votes

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.


0 commentaires