IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

REGEX


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de alevi7856
    Homme Profil pro
    Consultant ESN
    Inscrit en
    Mars 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ESN

    Informations forums :
    Inscription : Mars 2019
    Messages : 32
    Par défaut REGEX
    Bonjour à tous,

    Je suis une buse en REGEX :
    Nom : buse.jpg
Affichages : 114
Taille : 4,3 Ko

    J'ai une table SQL dans laquelle tous les records d'un field précis (c'est un field TEXTE) commencent par une chaîne de caractères formattée de cette manière : (jj-mm-aaaa)<br />
    exemple : (07-03-2019)<br />Bonjour, Je suis alevi, blah, blah, blah .... A bientôt. Alevi7856

    Je souhaite purement et simplement supprimer ces 18 caractères de tous les records de cette table et je compte utiliser la fonction rechercher/remplacer de phpMyAdmin qui permet de rechercher une REGEX et de la remplacer par une autre chaîne (c'est à dire par (rien du tout) dans mon cas).

    Comment puis-je formuler la REGEX d'une chaîne de caractères au format (jj-mm-aaaa)<br /> car j'ai un problème avec, entre autres, les parenthèses ( ) et les tiraits - qui sont des caractères réservés dans le codage REGEX !?

    Merci !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Ce serait plus simple de tronquer directement votre chaine en prenant la longueur de la chaine moins 18.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti Avatar de alevi7856
    Homme Profil pro
    Consultant ESN
    Inscrit en
    Mars 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ESN

    Informations forums :
    Inscription : Mars 2019
    Messages : 32
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ce serait plus simple de tronquer directement votre chaine en prenant la longueur de la chaine moins 18.
    A +
    Merci de votre contribution.
    Un exemple concret de requête qui pourrait faire l'affaire ?
    (pour rappel, je suis une buse ... )

  4. #4
    Membre averti Avatar de alevi7856
    Homme Profil pro
    Consultant ESN
    Inscrit en
    Mars 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ESN

    Informations forums :
    Inscription : Mars 2019
    Messages : 32
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ce serait plus simple de tronquer directement votre chaine en prenant la longueur de la chaine moins 18.
    A +
    Super, merci !
    Compte-tenu que ***chaque*** record de ma table ***commence*** par une chaîne (jj-mm-aaaa)<br />, il suffit effectivement de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `(table)` SET `(field name)` = SUBSTRING(`(field name)` , 19)
    Ca marche très bien.

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 035
    Par défaut
    Salut alevi7856.

    Et si la position de votre parenthèse fermante ne se trouve pas toujours au même endroit ?
    Et si il y a beaucoup d'espaces après la parenthèse fermente ?
    Et s'il n'y a pas de date en début de votre chaîne de caractères ?
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`       integer  unsigned NOT NULL auto_increment PRIMARY KEY,
      `texte`    varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`texte`) values
      ('(18/12/2018) Salut ... à bientôt.'),
      ('(26/1/2019)Bonjour .... merci pour tout.'),
      ('Bienvenue ...'),
      ('(15/2/2019)          Re. ...')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------------------------------------+
    | id | texte                                    |
    +----+------------------------------------------+
    |  1 | (18/12/2018) Salut ... à bientôt.        |
    |  2 | (26/1/2019)Bonjour .... merci pour tout. |
    |  3 | Bienvenue ...                            |
    |  4 | (15/2/2019)          Re. ...             |
    +----+------------------------------------------+
    --------------
    update `test`
       set texte = trim(substring(texte, locate(')',texte)+1))
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------------------------------+
    | id | texte                         |
    +----+-------------------------------+
    |  1 | Salut ... à bientôt.          |
    |  2 | Bonjour .... merci pour tout. |
    |  3 | Bienvenue ...                 |
    |  4 | Re. ...                       |
    +----+-------------------------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

  6. #6
    Membre averti Avatar de alevi7856
    Homme Profil pro
    Consultant ESN
    Inscrit en
    Mars 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ESN

    Informations forums :
    Inscription : Mars 2019
    Messages : 32
    Par défaut
    Merci Artemus (aka Ross ... )

    En fait dans mon cas, ça aurait été plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `test` SET  texte = TRIM(SUBSTRING(texte, LOCATE(')',texte)+7))
    Car le <br /> à la fin de (jj-mm-aa) était codé en 'dur' dans le FIELD concerné (de type TEXT).

    Quant aux occurrences (jj-mm-aa), en étant l'instigateur (avec mes petites mains), j'étais sûr que le format était 100% forcément du type (jj-mm-aa) !
    Donc, mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `(table)` SET `(field name)` = SUBSTRING(`(field name)` , 19)
    a tout à fait bien fonctionné.

    Je retiens en tout cas votre code pour l'utilisation du TRIM car je vais avoir professionnellement à me colleter de + en + du SQL ... ce qui ne m'enchante pas tout à fait (euphémisme).

    So long, cowboy.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Une regex simple je pense
    Par Fabrice14 dans le forum Langage
    Réponses: 1
    Dernier message: 25/01/2015, 16h07
  2. regex pourtant simple !
    Par apprenti doc dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2007, 20h24
  3. [POO] Classe PHP super simple Mais j'y arrive pas
    Par mulbek dans le forum Langage
    Réponses: 10
    Dernier message: 17/03/2006, 16h33
  4. [RegEx] Regex tout simple
    Par dorian53 dans le forum Langage
    Réponses: 3
    Dernier message: 18/02/2006, 17h44
  5. proleme tou simple je pense
    Par GroRelou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/04/2005, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo