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 :

requete update avec un convert?


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
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Par défaut requete update avec un convert?
    salut,

    je veux ecrire une requette de mise à jour (update)

    je trouve juste du mal aecrire la condition

    voila j'ai une table(id,chp1,chp2,chp3) sachant que le chp1(c'est un varchar)
    je veux modifier le chp3 par rapport à la valeur de chp1
    si cast(chp1 vers un entier)=>ok chp3=E
    sinon chp3=S

    j'ai pensé à cette condition mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update table1
    set chp3='E'
    where convert(int,chp1)
    des idées

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    En voici une

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE table1
    SET chp3= case when isNumeric(chp1) = 1 then 'E'
                    else 'S' end

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Attention à ISNUMERIC : si on exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	ISNUMERIC('+') AS plus
    	, ISNUMERIC('-') AS moins
    	, ISNUMERIC('.') AS point
    On obtient 1 dans les trois colonnes.
    C'est en fait ce que je montre ici

    Dès lors vous êtes obligé d'écrire une fonction dont vous pouvez vous servir pour spécifier une colonne calculée.

    Voici la fonction :

    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
    CREATE FUNCTION is_really_numeric
    	(@_string varchar(max))
    	RETURNS CHAR(1)
    	WITH SCHEMABINDING
    AS
    BEGIN
    	DECLARE @i INT
    		, @char CHAR(1)
    		, @lgr int
    		, @result CHAR(1)
     
    	SELECT	@i = 1
    		, @lgr = LEN(@_string)
    		, @result = 'E' -- entier
     
    	WHILE	@i <= @lgr
    	BEGIN
    		SELECT	@char = SUBSTRING(@_string, @i, 1)
     
    		IF ASCII(@char) BETWEEN 48 AND 57 
    		BEGIN 
    			SET @i = @i + 1
    		END
    		ELSE
    		BEGIN
    			SELECT	@result = 'S'
    				, @i = @lgr + 1
    		END
    	END
     
    	RETURN @result
    END
    GO
    Vous pouvez supprimer la colonne 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.table1
    DROP COLUMN chp3
    Et la remplacer par la colonne calculée dont la définition serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.table1
    ADD chp3 AS(dbo.is_really_numeric(chp1))
    Dès lors, plus besoin d'UPDATE.

    @++

Discussions similaires

  1. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 21h31
  2. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 12h03
  3. Requete Update avec sous requete
    Par joziel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/08/2006, 16h15
  4. requete update avec une condition
    Par youtou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/06/2006, 21h55
  5. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 18h19

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