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

MS SQL Server Discussion :

[fonctions T-SQL] upper(text)


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 316
    Points
    316
    Par défaut [fonctions T-SQL] upper(text)
    Bonjour,


    J'essaye de sélectionner des champs à travers un texte renseigné par un utilisateur. Pour éviter le problème de la casse, je convertis tout en uppercase, et ça marche pour des champs de type varchar, mais pas pour des champs de type text.
    Existe-t-il un moyen de palier à ce problème ?

    Requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from mailhisto where upper(contenu) like '%ten%';

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 8116, Niveau 16, État 1, Ligne 1
    Le type de données de l'argument text n'est pas valide pour l'argument 1 de la fonction upper.
    Voilà, en vous remerciant !

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Salut,

    Y a-t-il vraiment un problème de casse ? Quelle est la collation de ta colonne contenu ?
    Si elle est dans une collation case insensistive (...CI...), pas de souci, Si elle est dans une collation Case Sensitive (CS), tu peux toujours la passer en case insensitive dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from mailhisto where contenu collate French_CI_AI like '%ten%';
    Lis cet article : http://sqlpro.developpez.com/cours/s...er/collations/

    Autre solution pour améliorer tes performances : utiliser FTS (Full-Text Search)
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 316
    Points
    316
    Par défaut
    ok, je te remercie beaucoup ! Je débarque dans le monde sql server, et je ne connais encore pas grand chose à ce sgbdr.

    Ton lien (et tes explications) est très intéressant merci beaucoup !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    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 782
    Points : 52 787
    Points
    52 787
    Billets dans le blog
    5
    Par défaut
    Un SGBDR n'est pas un traitement de texte. Si vous avez besoin de texte qui dépassent une certaine longueur SQL Server ne vous permettra pas de les traiter de manière ensembliste (requête). Ce serait trop dangereux.
    Imaginez que vous ayez 30000 lignes dans votre table (ce qui est peu dans une base de données) avec chacune une colonne de type TEXT contenant un texte au maximum de la capacité de cette colonne, soit 2 Go...

    Un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT UPPER (MonTexte)
    FROM MATABLE
    Provoquera la conversion de :
    30000 * 2147483648 caractères, soit 64 424 509 440 000.
    A raison de 500 000 caractères traités par seconde... Il vous faudra patienter 1491 jours 7 heures et 12 minutes pour voir s'afficher votre réponse.
    Avez-vous autant de temps ???

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

  5. #5
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Quelle est la pertinence d'utiliser un TEXT pour des emails ?
    un varchar(max) ne serait-il pas déjà bien suffisant ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  6. #6
    Membre averti
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Points : 316
    Points
    316
    Par défaut
    SQLPro > Pensez-vous alors que le traitement sera plus rapide si l'on garde tous les résultats et qu'on effectue à la main les tests de casse ?
    Mon application tourne en java, et entre la rapidité de sql server et celle de l'interpréteur java, je ne suis pas certain d'y être gagnant...

    Bon après c'est sur on peut toujours faire appel à des classes gérant les expressions régulières pour plus de rapidité, mais je n'en ai pas encore éprouvé le besoin.

    Merci beaucoup, je n'avais pas pensé à cet aspect.

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par fadace
    un varchar(max) ne serait-il pas déjà bien suffisant ?
    Sauf qu'il doit avoir la version 2005 !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par WOLO Laurent
    Sauf qu'il doit avoir la version 2005 !
    ... le max pouvait être compris dans les 2 sens . Mot clé 2005 ou max autorisé (8000) 2000.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

Discussions similaires

  1. [AC-2007] Fonction Requête SQL pour zone de texte
    Par tiyo76 dans le forum IHM
    Réponses: 10
    Dernier message: 05/06/2013, 08h43
  2. FONCTION SQL - reconnaissance texte dans une table
    Par dahu17 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/03/2007, 11h16
  3. [SYBASE] Fonctions SYBASE mathématiques et textes
    Par Ludolitaliano dans le forum Sybase
    Réponses: 3
    Dernier message: 30/09/2003, 16h18
  4. [PostgreSQL] fonction pl/sql
    Par sam54 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/05/2003, 16h09
  5. - fonction Transact-SQL...
    Par korrigann dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/05/2003, 15h00

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