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

Langage SQL Discussion :

Fonction REPLACE sensible à la casse


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Manager
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Manager

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Fonction REPLACE sensible à la casse
    Je voudrais remplacer dans le corps du texte les caractères accentués par leur équivalent HTML. Or, la fonction REPLACE ne semble pas sensible à la casse.
    SELECT REPLACE('éÉ','é','é') me donne éé
    et non pas éÉ

    Merci de m'aider !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Manager
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Manager

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé ailleurs sur le forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT REPLACE('Éé','É' COLLATE SQL_Latin1_General_Cp1_CS_AS,'É')
    Il faut ajouter COLLATE SQL_Latin1_General_Cp1_CS_AS après la lettre à remplacer.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 14
    Points : 19
    Points
    19
    Par défaut ce n'est pas le REPLACE qui est insensible à la casse
    Citation Envoyé par bivort Voir le message
    J'ai trouvé ailleurs sur le forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT REPLACE('Éé','É' COLLATE SQL_Latin1_General_Cp1_CS_AS,'É')
    Il faut ajouter COLLATE SQL_Latin1_General_Cp1_CS_AS après la lettre à remplacer.
    Pour être plus précis, ce n'est pas le REPLACE qui est insensible à la casse mais la BDD (probablement en classement ...CI..., CI pour Case Insensitive)

    Par exemple, avec une BDD en French_CS_AS, on aura le problème inverse : le replace sera insensible à la casse.
    Dans ce cas, si l'on souhaite qu'un mot soit remplacé quelque soit la casse, il faudra taper le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE(TEXTE, 'ancien' COLLATE SQL_Latin1_General_Cp1_CI_AS, 'nouveau')

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par cunlhaontz Voir le message
    Pour être plus précis, ce n'est pas le REPLACE qui est insensible à la casse mais la BDD (probablement en classement ...CI..., CI pour Case Insensitive)
    Dans certains SGBD (ex : SQL server), la collation peut être définie au plus fin, à savoir la colonne

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bivort Voir le message
    J'ai trouvé ailleurs sur le forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT REPLACE('Éé','É' COLLATE SQL_Latin1_General_Cp1_CS_AS,'É')
    Il faut ajouter COLLATE SQL_Latin1_General_Cp1_CS_AS après la lettre à remplacer.
    Ta solution ne fonctionnera pas : elle remplacera tous les É et é par É.

    Si tu veux remplacer É par É et é par é tu n'as pas d'autre choix que de faire deux REPLACE, sensibles à la casse, un pour le É et un pour le é.

    Accessoirement, tu n'as pas à stocker dans la base ces modifications de texte, et c'est pas à la requête de sélection de faire ce travail, mais à l'application cliente.

    Tous les langages de haut niveau disposent de tout ce qu'il faut pour effectuer les conversions dans les deux sens.

    Si tu stockes de HTML Entities dans ta base, alors tu exclu inutilement toutes les capacités de recherches littérales, et en plus tu augmentes inutilement la taille occupée par les données.
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. [ODBC] Fonction Replace en ODBC
    Par Alexandre T dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2007, 12h02
  2. Fonction replace
    Par pmboutteau dans le forum ASP
    Réponses: 11
    Dernier message: 10/06/2005, 10h42
  3. Nom de la table sensible à la casse
    Par Alexandre T dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/03/2005, 18h34
  4. PB avec la fonction replace
    Par Techman128 dans le forum C++
    Réponses: 6
    Dernier message: 24/02/2005, 12h39
  5. Fonction replace
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 10/06/2004, 13h18

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