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

PostgreSQL Discussion :

Tester type de colonne dans order by


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut Tester type de colonne dans order by
    Bonjour

    Dans une requête, je suis en train d'effectuer un tri sur une colonne qui normallement a des valeurs numériques (bien que la colonne soit de type text).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT value, description FROM table  
    ORDER BY cast(value as int)
    Cependant, dans des rares cas, la colonne aura des valeurs textuelles, ainsi, ma requête échouera.
    Sachant que je ne peux pas modifier mon schéma de base de données, a-t-il un moyen de tester la valeur présente dans la colonne dans le order by afin de faire ou non le cast?

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT value, description FROM table  
    ORDER BY CASE value isnumeric THEN cast(value as int)
       ELSE value
       END
    merci!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	VALUE
    from TABLE 
    ORDER BY 
    	CASE 
    		WHEN VALUE ~ '[0-9]+' THEN 0 
    		ELSE 1 
    	END, 
    	VALUE
    Le premier membre du ORDER BY renvoie 0 pour les chaines qui ne contiennent que des nombres et 1 pour les autres. Ceci placera en premier les valeurs numériques.

    Vous ne pouvez pas caster ou non quelque chose car ça impliquerait d'avoir des types de données différents dans une même colonne (impossible).

    Inspirez vous du code que je donne pour ordonner comme vous souhaitez.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 756
    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 : 21 756
    Points : 52 531
    Points
    52 531
    Billets dans le blog
    5
    Par défaut
    Il faut utiliser un e expression régulière car voici quelques littéraux qui sont des nombres :
    E2
    10.3 E-1
    -12
    33.45

    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/ * * * * *

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut
    Très bien.

    Merci!

    Citation Envoyé par vmolines Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	VALUE
    from TABLE 
    ORDER BY 
    	CASE 
    		WHEN VALUE ~ '[0-9]+' THEN 0 
    		ELSE 1 
    	END, 
    	VALUE
    Le premier membre du ORDER BY renvoie 0 pour les chaines qui ne contiennent que des nombres et 1 pour les autres. Ceci placera en premier les valeurs numériques.

    Vous ne pouvez pas caster ou non quelque chose car ça impliquerait d'avoir des types de données différents dans une même colonne (impossible).

    Inspirez vous du code que je donne pour ordonner comme vous souhaitez.

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

Discussions similaires

  1. [SP-2010] probleme de type de colonne dans une vue
    Par Fred06 dev dans le forum SharePoint
    Réponses: 7
    Dernier message: 26/12/2013, 11h09
  2. [VxiR2] Changer un type de colonne dans la DB une fois l'univers créé
    Par blured dans le forum Designer
    Réponses: 1
    Dernier message: 02/04/2009, 09h12
  3. Changement dynamique du type de colonne dans un datagridview
    Par hotsizzle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/03/2009, 13h32
  4. Tester l'existence d'une colonne dans une table
    Par caps_corp dans le forum Access
    Réponses: 4
    Dernier message: 05/06/2006, 17h31
  5. Facilité de tester les types de champs dans un FORM ?
    Par shadeoner dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2006, 20h49

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