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

Développement SQL Server Discussion :

Mettre à jour champs uniquement avec des chiffres


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Mettre à jour champs uniquement avec des chiffres
    Bonsoir à tous,

    Dans ma base de donnée j'ai 3 champs pour pour les numéros de téléphone mais ils sont mal renseignés.

    j'ai des caractères . , ; et même des lettres, et même des champs avec même pas 10 caractères.

    je voudrais faire un update sur ces champs pour corriger çà.

    Je connais le replace pour remplacer par rien, mais je ne sais pas comment faire pour effacer les lettres et effacer si le contenu ne fait pas 10 caractères.

    Auriez-vous des conseils pour réaliser ces 2 derniers points ?

    merci d'avance pour vos conseils

    guigui69

  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
    Procédez en deux temps :
    1) nettoyage des caractères parasite. Utilisez la fonction FN_RESTRICT que j'ai écrit :
    https://sqlpro.developpez.com/cours/sqlserver/udf/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE MaTable
    SET MaColTe = dbo.FN_RESTRICT(MaColTel, '0123456789')
    2) supprimez les chaines résultantes de longueur inférieure à 10.

    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 éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour a tous,

    merci SqlPro

    j'ai poussez un plus loin mon script que voici et je voudrais avoir votre retour si je n'ai pas commis erreur.

    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
     
    --Nettoyage champs email en remplacement les , et ; en point sur le champs email et email pro
    update tgcliente set Email=replace(replace(Email,',','.'),';','.')
    update tgcliente set EmailPro=replace(replace(EmailPro,',','.'),';','.')
     
    --Mise à jour du champs email en "nc@nc.fr" pour tout Email champs nom conforme
    update tgcliente set Email ='nc@nc.fr' where email NOT LIKE '%_@__%.__%'
    --Mise à jour du champs emailPro a vide pour tout EmailPro champs nom conforme
    update tgcliente set EmailPro ='' where EmailPro NOT LIKE '%_@__%.__%'
     
    /****************************************************************************/
    -- purge de caractères indésirables
    /****************************************************************************/
    -- exemple : FN_RESTRICT('à Paris...?', 'abcdefghijklmnopqrstuvwxyz') => 'aris'
    CREATE FUNCTION FN_RESTRICT (@IN VARCHAR (8000),
                                 @CHARSOK VARCHAR(256))
    RETURNS VARCHAR (8000)
    AS 
    BEGIN 
    -- effets de bord
       IF @IN IS NULL
          RETURN NULL
       IF @CHARSOK IS NULL
          RETURN NULL
       IF LEN(@IN) = 0
          RETURN @IN
    -- initialisation
       DECLARE @I INTEGER
       DECLARE @OUT VARCHAR(8000)
       SET @OUT = ''
    -- lecture caractère par caractère
       SET @I =1
       WHILE @I <= LEN(@IN)
       BEGIN
          IF PATINDEX('%' + SUBSTRING(@IN, @I, 1)+ '%', @CHARSOK) > 0
             SET @OUT = @OUT + SUBSTRING(@IN, @I, 1)
          SET @I = @I + 1
       END
       RETURN @OUT
    END
    GO
     
    --nettoyage des champs téléphone fax en ne conservant uniquement des numéros
    update tgcliente set 
    NumGSM=dbo.FN_RESTRICT(NumGSM, '0123456789'),
    NumGSMPro=dbo.FN_RESTRICT(NumGSMPro, '0123456789'),
    NumTel1=dbo.FN_RESTRICT(NumTel1, '0123456789'),
    NumTel2=dbo.FN_RESTRICT(NumTel2, '0123456789'),
    Numfax=dbo.FN_RESTRICT(Numfax, '0123456789')
     
    --effacer les numéro de téléphone inférieur à 10 caractère
     
    update tgcliente set numGSM='' where len(numGSM) < 10
    update tgcliente set NumGSMPro='' where len(NumGSMPro) < 10
    update tgcliente set NumTel1='' where len(NumTel1) < 10
    update tgcliente set NumTel2='' where len(NumTel2) < 10
    update tgcliente set Numfax='' where len(Numfax) < 10
     
    -- mettre à jour le champs numGSM (N* Mobile) avec  la valeur du champ Nimtel1 si le champs est NumGSm est null et que les numeros de numte1 commence par 06 et 07
    update tgcliente set numGSM =Numtel1 where (numGSM is null OR NumGSM ='') and (Numtel1 like '06%' OR Numtel1 like '07%')
    merci d'avance pour vos conseils

    guigui69

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update tgcliente set NumTel1='' where len(NumTel1) < 10
    La cause classique de la galère pour les personnes qui ont quitté la France mais qui ont encore des comptes ouverts en France.
    C'est aussi le cas pour les codes postaux.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour,

    je ne comprend pas ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guigui69 Voir le message
    je ne comprend pas ?
    oups, c'est moi qui dit de la merde et qui lit de travers J'avais lu <> 10.
    Comme on peut mettre plus de 10 chiffres, y a pas de problème pour moi.
    Toutes mes confuses.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/10/2015, 15h52
  2. Réponses: 3
    Dernier message: 03/04/2013, 18h34
  3. Réponses: 2
    Dernier message: 03/04/2013, 13h04
  4. [MySQL] Mettre a jour une table avec des checkbox
    Par dlecteur dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/09/2010, 12h50
  5. [ODBC] Comment mettre à jour 2 bases ayant des noms de champs différents ???
    Par Alexlesilex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/05/2006, 18h08

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