171 votes

Comment diviser la chaîne de noms dans mysql ?

Comment diviser la chaîne de noms dans mysql ?

Par exemple :

name
-----
Sachin ramesh tendulkar
Rahul dravid

Divisez le nom comme suit firstname,middlename,lastname :

firstname   middlename    lastname
---------  ------------   ------------
sachin     ramesh         tendulkar
rahul      dravid

3voto

Farookh Mansuri Points 41
select (case when locate('(', LocationName) = 0 
        then 
            horse_name
        else 
           left(LocationName, locate('(', LocationName) - 1)
       end) as Country            
from   tblcountry;

3voto

concat(upper(substring(substring_index(NAME, ' ', 1) FROM 1 FOR 1)), lower(substring(substring_index(NAME, ' ', 1) FROM 2 FOR length(substring_index(NAME, ' ', 1))))) AS fname,
CASE 
WHEN length(substring_index(substring_index(NAME, ' ', 2), ' ', -1)) > 2 THEN 
  concat(upper(substring(substring_index(substring_index(NAME, ' ', 2), ' ', -1) FROM 1 FOR 1)), lower(substring(substring_index(substring_index(f.nome, ' ', 2), ' ', -1) FROM 2 FOR length(substring_index(substring_index(f.nome, ' ', 2), ' ', -1)))))
  ELSE 
  CASE 
  WHEN length(substring_index(substring_index(f.nome, ' ', 3), ' ', -1)) > 2 THEN 
    concat(upper(substring(substring_index(substring_index(f.nome, ' ', 3), ' ', -1) FROM 1 FOR 1)), lower(substring(substring_index(substring_index(f.nome, ' ', 3), ' ', -1) FROM 2 FOR length(substring_index(substring_index(f.nome, ' ', 3), ' ', -1)))))
  END 
END 
AS mname

2voto

Patnaidu Landa Points 15

Pour obtenir le reste de la chaîne après la deuxième instance du délimiteur d'espacement

SELECT
   SUBSTRING_INDEX(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 1), ' ', -1) AS first_name, 
       SUBSTRING_INDEX(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 2), ' ', -1) 
           AS middle_name,
   SUBSTRING('Sachin ramesh tendulkar',LENGTH(SUBSTRING_INDEX('Sachin ramesh tendulkar', ' ', 2))+1) AS last_name

2voto

Gildonei Points 459
SELECT
    p.fullname AS 'Fullname',
    SUBSTRING_INDEX(p.fullname, ' ', 1) AS 'Firstname',
    SUBSTRING(p.fullname, LOCATE(' ',p.fullname), 
        (LENGTH(p.fullname) - (LENGTH(SUBSTRING_INDEX(p.fullname, ' ', 1)) + LENGTH(SUBSTRING_INDEX(p.fullname, ' ', -1))))
    ) AS 'Middlename',
    SUBSTRING_INDEX(p.fullname, ' ', -1) AS 'Lastname',
    (LENGTH(p.fullname) - LENGTH(REPLACE(p.fullname, ' ', '')) + 1) AS 'Name Qt'
FROM people AS p
LIMIT 100; 

Je m'explique :

Trouver le prénom et le nom est facile, il suffit d'utiliser la fonction SUBSTR_INDEX. La magie se produit dans le nom du milieu, où SUBSTR a été utilisé avec Locate pour trouver la première position d'espace et LENGTH du nom complet - (LENGTH prénom + LENGTH nom) pour obtenir tout le nom du milieu.

Notez que la LONGUEUR du prénom et du nom a été calculée en utilisant SUBSTR_INDEX.

1voto

ToBe_HH Points 570

Vous pourriez utiliser le schéma commun et utiliser le tokenize fonction. Pour plus d'informations à ce sujet, suivez les liens. Votre code serait donc le suivant :

call tokenize(name, ' ');

Toutefois, il faut savoir qu'un espace n'est pas un séparateur fiable pour le prénom et le nom de famille. Par exemple, en Espagne, il est courant d'avoir deux noms de famille.

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